Context-sensitive auto-responder

ABSTRACT

In response to detecting an incoming message (such as an email message, a text message, or a voice message) sent by a sender to a recipient, a computer system determines whether a current context of the recipient satisfies a condition. If the current context of the recipient satisfies the condition, then the system selects a response message based on the current context and sends the response message to the sender. The system&#39;s decision about whether to respond automatically to subsequent messages sent to the recipient may vary as the recipient&#39;s context changes. Furthermore, the system may select and send different response messages based on changes in the recipient&#39;s context.

CROSS-REFERENCE TO RELATED APPLICATIONS

This application is a continuation-in-part of the following co-pendingpatent applications, all of which are incorporated by reference herein:

-   -   U.S. patent application Ser. No. 13/244,206, filed on Sep. 23,        2011, entitled, “Profile-Based Message Control”    -   U.S. patent application Ser. No. 13/291,688, filed on Nov. 8,        2011, entitled, “Time-Based Computer Control”    -   U.S. patent application Ser. No. 13/292,032, filed on Nov. 8,        2011, entitled, “Enforced Unitasking in Multitasking Systems”

This application is related to a concurrently-filed patent applicationentitled, “Conditional Auto-Responder” Ser. No. 13/709,018 which ishereby incorporated by reference herein.

BACKGROUND

Today's computer users are faced with a continuous barrage of incominginformation in the form of email messages, text messages, voice messagesand live voice calls, and messages transmitted via social networkingsystems, to name a few. Similarly, users are expected and sometimesrequired to create and transmit an equally high volume of outgoingmessages as part of their work and social commitments. Such a constantstream of communication can make it difficult for computer users toconcentrate on tasks requiring deep, sustained thought while usingcomputers.

Although many recognize the potential harm of increasingly distractedcomputer and Internet use, as evidenced by pejorative terms such as“Crackberry addict” to describe someone who compulsively sends andreceives email using a Blackberry mobile computing device, the blame forsuch harms typically is laid at the feet of the computer user forfailing to exercise sufficient self-control. The solution most commonlyproposed to this problem is for computer users to unilaterally changetheir usage habits, such as by leaving their computers at home while onvacation or manually turning off their smartphones while in restaurants.

SUMMARY

In response to detecting an incoming message (such as an email message,a text message, or a voice message) sent by a sender to a recipient, acomputer system determines whether a current context of the recipientsatisfies a condition. If the current context of the recipient satisfiesthe condition, then the system selects a response message based on thecurrent context and sends the response message to the sender. Thesystem's decision about whether to respond automatically to subsequentmessages sent to the recipient may vary as the recipient's contextchanges. Furthermore, the system may select and send different responsemessages based on changes in the recipient's context.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1A is a dataflow diagram of a computer control system according toone embodiment of the present invention;

FIGS. 1B-1D are diagrams illustrating profiles and relationships amongprofiles according to embodiments of the present invention;

FIG. 1E is a diagram illustrating relationships between profiles andlogic modules according to one embodiment of the present invention;

FIGS. 1F-1G are diagrams illustrating the operation of a profilecontroller according to one embodiment of the present invention;

FIGS. 1H-1I are diagrams illustrating the operation of a logic modulecontroller according to one embodiment of the present invention;

FIG. 1J is a diagram illustrating the operation of a logic moduleexecution unit according to one embodiment of the present invention;

FIG. 1K is a diagram illustrating the operation of a profile executionunit according to one embodiment of the present invention;

FIG. 2 is a diagram of a context controller for obtaining andsynthesizing context data according to one embodiment of the presentinvention;

FIG. 3A is a flowchart of a method performed by the system of FIG. 1Faccording to one embodiment of the present invention;

FIG. 3B is a flowchart of a method performed by the system of FIG. 1Gaccording to one embodiment of the present invention;

FIG. 3C is a flowchart of a method performed by the system of FIG. 1Haccording to one embodiment of the present invention;

FIG. 3D is a flowchart of a method performed by the system of FIG. 1Iaccording to one embodiment of the present invention;

FIG. 3E is a flowchart of a method performed by the system of FIG. 1Jaccording to one embodiment of the present invention;

FIGS. 3F and 3G are flowcharts of methods performed by the system ofFIG. 1K according to embodiments of the present invention;

FIG. 4A is a diagram of a computer control system implemented on asingle device according to one embodiment of the present invention;

FIG. 4B is a diagram illustrating a physical implementation of deviceprofiles according to one embodiment of the present invention;

FIG. 4C is a diagram illustrating a physical implementation of userprofiles according to one embodiment of the present invention;

FIGS. 5A-5D are diagrams illustrating the use of activation states withprofiles and logic modules according to embodiments of the presentinvention;

FIGS. 6A-6D are flowcharts of methods performed to execute profiles andlogic modules according to embodiments of the present invention;

FIG. 7A is a diagram illustrating use of an embodiment of the presentinvention to enforce communication unitasking among one or more devicesaccording to one embodiment of the present invention;

FIG. 7B is a diagram illustrating use of an embodiment of the presentinvention to enforce unitasking among one or more devices according toone embodiment of the present invention;

FIG. 7C is a diagram illustrating a plurality of unitasking specifiersaccording to one embodiment of the present invention;

FIG. 8A is a flowchart of a method performed by the system of FIG. 7Aaccording to one embodiment of the present invention;

FIG. 8B is a flowchart of a method performed by the system of FIG. 7Baccording to one embodiment of the present invention;

FIGS. 9A-9D are illustrations of user interfaces for interacting withprofiles and logic modules according to one embodiment of the presentinvention;

FIG. 10 is a diagram of a system including a calendar according to oneembodiment of the present invention;

FIG. 11 is a flowchart of a method for creating appointments on acalendar according to one embodiment of the present invention;

FIG. 12 is a flowchart of a method for applying logic modules toappointments on a calendar according to one embodiment of the presentinvention;

FIG. 13 is a dataflow diagram of a system for implementing anauto-responder according to one embodiment of the present invention; and

FIG. 14 is a flowchart of a method performed by the system of FIG. 13according to one embodiment of the present invention.

DETAILED DESCRIPTION

Referring to FIG. 1A, a dataflow diagram is shown of a computer controlsystem 100 implemented according to one embodiment of the presentinvention. In general, the system 100 includes one or more profiles thatdefine actions to be taken by the system 100 in response to satisfactionof conditions defined by the profiles. As will be described in moredetail below, such conditions and actions may be defined in ways thatcontrol the extent to which users of the system 100 are distracted bydevices within the system 100 and by other devices used by such users.

The system 100 includes one or more logic modules 102 a-c. Althoughthree logic modules 102 a-c are shown in FIG. 1A as an example, thesystem 100 may include any number of logic modules. In general, each ofthe logic modules 102 a-c defines a condition and a correspondingaction. As will be described in more detail below, the system 100 orother embodiment of the present invention may perform the action definedby a logic module if the condition defined by the logic module issatisfied by the current context of the system 100. For example, logicmodule 102 a includes condition specifier 104 a (which specifies a firstcondition) and action specifier 106 a (which specifies a first action);logic module 102 b includes condition specifier 104 b (which specifies asecond condition) and action specifier 106 b (which specifies a secondaction); and logic module 102 c includes condition specifier 104 c(which specifies a third condition) and action specifier 106 c (whichspecifies a third action).

The condition and action specified by a particular logic module mayimplement a rule, such that the system 100 necessarily performs theaction in response to determining that the condition is satisfied. Logicmodules 102 a-c need not, however, implement rules. Alternatively, forexample, logic modules 102 a-c may implement statistical methods suchthat the action specified by a logic module may or may not be performedin response to detecting that the condition specified by the logicmodule is satisfied in a particular instance. For example, a logicmodule may be implemented such that the action specified by the logicmodule is performed with a likelihood of 50% in response to determiningthat the condition specified by the logic module is satisfied, with thedecision in a particular instance being implemented using apseudo-random number generator. Various examples disclosed herein,however, will describe logic modules 102 a-c as implementing rules forease of explanation.

Each of condition specifiers 104 a-c may specify a simple condition,such as a condition including only a single premise, such as“TIME=11:00,” or a complex condition including a plurality of premisesjoined by one or more Boolean operators (e.g., AND, OR, XOR, NOT) in anycombination. Therefore, any reference herein to a “condition” includessimple conditions and/or complex conditions. More generally, a conditionmay be implemented using any process that produces an output (e.g., abinary output) to determine whether to perform the corresponding action.

Similarly, each of action specifiers 106 a-c may specify a simpleaction, such as an action to block receipt of an email message, or acomplex action including a plurality of actions. Therefore, anyreference herein to an “action” includes simple actions and/or complexactions. More generally, an action may be implemented using any process.

An action specifier may specify an action at any level of generality.For example, an action specifier may specify a particular action to beperformed by the hardware of a device. As another example, an actionspecifier may specify a type of action, such as “block.” In such a case,the specified action may be performed by identifying one or morespecific acts that implement the specified action, and by performing theone or more specific acts. For example, a “block” action may beperformed by performing a first set of acts to block an incoming emailmessage, by performing a second set of acts to block an outgoing emailmessage, and a third set of acts to block an incoming voice call, wherethe first, second, and third sets of acts differ from each other. Theparticular act(s) to perform in a particular instance to implement the“block” action may be determined dynamically and on-the-fly.

More generally, an action specifier may specify an action that isdefined by any process, function, algorithm, or other set of acts. Forexample, an action specifier may specify a process which, whenperformed, receives input from some or all of the context data describedbelow. As a result, the acts performed when executing a particularaction specifier may vary from case to case depending on the currentcontext data.

Any two of the condition specifiers 104 a-c may specify the same ordifferent conditions from each other. Similarly, any two of the actionspecifiers 106 a-c may specify the same or different actions from eachother. For example, no two of the condition specifiers 104 a-c mayspecify the same condition as each other. As another example, conditionspecifiers 104 a and 104 b may specify the same conditions as eachother, but condition specifier 104 c may specify a condition thatdiffers from the conditions specified by condition specifier 104 a andcondition specifier 104 b. Similarly, for example, no two of the actionspecifiers 106 a-c may specify actions that are the same as each other.As another example, action specifiers 106 a and 1046 b may specify thesame actions as each other, but action specifier 106 c may specify anaction that differs from the actions specified by both action specifier106 a and action specifier 106 b.

The system 100 also includes various profiles. In general, the term“profile” is used herein to refer to any set of data, such as a set ofdata that includes parameters, where each parameter has both a type anda value. For example, one parameter may have a type of “time” and avalue that represents the current time (e.g., 11:00).

The system 100 includes, for example, one or more system profiles. Ingeneral, a system profile includes data representing information relatedto the system 100 as a whole. A single system profile 110 is shown inFIG. 1A. The system 100 may, however, include more than one systemprofile.

The system 100 also includes, for example, one or more user profiles. Ingeneral, a user profile includes data representing information relatedto a particular human user. In the example of FIG. 1A, the system 100includes two user profiles 112 a and 112 b, which include datarepresenting information related to users 122 a and 122 b, respectively.The system 100 may, however, include any number of user profiles.

The system 100 also includes, for example, one or more device profiles.In general, a device profile includes data representing informationrelated to a particular device, such as a computing device or acommunication device. In the example of FIG. 1A, the system 100 includesthree device profiles 114 a-c, which include data representinginformation related to devices 124 a-c, respectively. The system 100may, however, include any number of device profiles.

The system 100 need not include all of the types of profiles shown inFIG. 1A, where examples of profile types are system, user, and device.Rather, for example, the system 100 may solely include one or moreprofiles of a single type. For example, the system 100 may solelyinclude a system profile, or solely include a user profile, or solelyinclude a device profile. More generally, the system 100 may include oneor more profiles of each of one or more of the types shown in FIG. 1A,so that the system 100 includes at least one profile of at least onetype.

Profiles may be associated with each other in various ways. For example,a system profile may be associated with one or more user profiles.Referring to FIG. 1B, an example is shown in which system profile 110 isassociated with user profiles 112 a and 112 b, as indicated byassociations 130 a and 130 b, respectively. Although in the example ofFIG. 1B the system profile 110 is associated with all of the userprofiles 112 a-b in the system 100, this is not required; the systemprofile 110 may alternatively be associated with fewer than all of theuser profiles 112 a-b in the system 100.

Referring to FIG. 1C, an example is shown in which: (1) user profile 112a is associated with device profiles 114 a and 114 b, as indicated byassociations 132 a and 132 b, respectively; and (2) user profile 112 bis associated with device profile 114 c, as indicated by association 132c. As these examples illustrate, a user profile may be associated withany number of device profiles. Furthermore, although not shown in FIG.1C, two user profiles may be associated with the same device profile.For example, this would occur in FIG. 1C if the user profile 112 b wereadditionally associated with device profile 114 b.

Referring to FIG. 1D, an example is shown in which system profile 110 isassociated with device profiles 114 a-c, as indicated by associations134 a-c, respectively. Although in the example of FIG. 1D the systemprofile 110 is associated with all of the device profiles 114 a-c in thesystem 100, this is not required; the system profile 110 mayalternatively be associated with fewer than all of the device profiles114 a-b in the system 100.

Any profile of any type may be associated with more or more logicmodules. For example, referring to FIG. 1E, an example is shown in whichsystem profile 110 is associated with logic module 102 a (as indicatedby association 136 a); user profile 112 a is associated with logicmodule 102 a (as indicated by association 136 b) and logic module 102 b(as indicated by association 136 c); user profile 112 b is associatedwith logic module 102 c (as indicated by association 136 d); deviceprofile 114 a is associated with logic module 102 a (as indicated byassociation 136 e); device profile 114 b is associated with logic module102 a (as indicated by association 136 f) and logic module 102 c (asindicated by association 136 g); and device profile 114 c is notassociated with any logic module.

As illustrated in FIG. 1E, any profile of any type may be associatedwith any number (i.e., zero or more) of logic modules. One logic modulemay be associated with multiple profiles, e.g., multiple profiles of thesame type or of different types. Furthermore, although in the example ofFIG. 1E at least one profile of each type (system, user, and device) isassociated with at least one logic module, this is not a requirement.Instead, for example, the system profile 110 may not be associated withany of the logic modules 102 a-c. As another example, neither of theuser modules 112 a-b may be associated with any of the logic modules 102a-c. As yet another example, none of the device modules 114 a-c may beassociated with any of the logic modules 102 a-c. All that is requiredis that at least one profile in the system 100 be associated with atleast one of the logic modules 102 a-c.

Referring to FIG. 2, a dataflow diagram is shown of a system 200 forobtaining and storing context data 202. Context data 202 is alsoreferred to herein as “context.” Context data 202 may, for example,represent information about an activity currently engaged in by one ofthe users 122 a-b of the system 100, information about appointments on auser's calendar, or information about messages currently beingtransmitted by the system 100.

The system 200 includes a plurality of context sensors 206 a-j. Ingeneral context sensors 206 a-j obtain sensor inputs 214 a-j,respectively, and generate outputs 208 a-j, respectively. The outputs208 a-j of context sensors 206 a-j are provided to and received bycontext controller 204, which generates and stores context data 202based on the received outputs 208 a-j. Context data 202 may, forexample, include a context data record 210 a, which includes fields 212a-j corresponding to and representing sensor outputs 208 a-j,respectively. More specifically, field 212 a may represent sensor output208 a, field 212 b may represent sensor output 208 b, and so on.

Although not shown in FIG. 2, context controller may be used to read thecontext data 202. For example, context controller 204 may provide outputrepresenting some or all of context data 202, e.g., in response to arequest from another component for such data. Furthermore, contextcontroller 204 may receive a request from another component to modifysome or all of context data 202 and, in response to such a request, maymake the requested modification to the context data 202.

Context controller 204 may sample the outputs 208 a-j repeatedly, e.g.,periodically (e.g., every millisecond, every second, or every minute),or in response to detecting a change in one or more of the outputs 208a-j. The context controller 204 may generate and store multiple contextdata records 210 a-n, each of which represents a distinct sample of someor all of the sensor outputs 208 a-j. Such repeated sampling and storagemay, for example, be used to store a record of the history of contextdata generated by the context controller 204 within the context data 202itself. Alternatively, for example, the context controller 204 may storeonly a single context data record 212 a within the context data 202, andoverwrite the values in the context data record 212 a based on theoutputs 208 a-j received most recently from the sensors 206 a-j.

Each of the sensors 206 a-j may provide, as its output, an output thatis identical to or a copy of the sensor's input, or an output that isgenerated based on the sensor's input but which differs from thesensor's input in any of a variety of ways, such as in its format and/orvalue. Furthermore, inputs 214 a-j are optional; they may be omittedfrom the system 200 or integrated into their corresponding sensors. Anyone or more of the sensors 206 a-j may receive multiple inputs andderive output from such multiple inputs in any way.

Sensor 206 a is a time sensor, which receives time sensor input 214 a,such as data generated by a clock representing a current time. Timesensor 206 a may, for example, generate output 208 a representing acurrent time (e.g., the time at or around the time at which the sensoroutput 208 a is generated). Such a time may be any kind of time, such asa real time (e.g., Jan. 1, 2011 at 11:00AM) or a system time (e.g., anumber of clock cycles since a device was booted), represented to anydegree of accuracy.

Storing a value that is equal to or based on the time sensor output 208a in the context records 210 a-n effectively marks such records withtimestamps that may later be used to associate any particular recordwith the time stored in the record's time field 212 a, which mayrepresent the actual or approximate time at which the record wascreated. The context controller 204 may sample all of the sensor outputs208 a-j at or near the time represented by the time sensor output 208 aand generate a corresponding context record based on such sampledoutputs, so that each of the context records 212 a-n generated by thecontext controller 204 a contains data representing context informationthat is valid for a single point in time or a relatively short period oftime overlapping with or near the time represented by the record's timefield 212 a, and so that the record's time field 212 a may subsequentlybe used to identify the actual or approximate time(s) for which theinformation represented by the other fields 212 b-i in the same recordis valid.

Any references below to the “current sample period” in connection withthe set of sensor outputs 208 a-j therefore refers to a point in time orperiod of time defined by reference to the time represented by timesensor output 208 a, such as the exact point in time represented by timesensor output 208 a or a time period beginning with or otherwiseincluding the point in time represented by time sensor output 208 a.Similarly, any use of the terms “current” or “currently” below should beunderstood to refer to a time or time period defined by reference to thetime represented by the time sensor output 208 a. For example, in thecontext of a particular set of sensor outputs 208 a-j within the currentsample period, “the current user” should be understood to refer to theuser represented by output 208 b of user sensor 206 b at or around thetime represented by time sensor output 208 a.

Sensor 206 b is a user sensor, which receives user sensor input 214 band generates, based on input 214 b, output 208 b representing a user,such as a current user of one of the devices 124 a-c or the system 100as a whole. The sensor 206 b may, for example, obtain input 214 brepresenting user login credentials (e.g., username and/or password) orbiometric information, and provide user output 208 b uniquelyidentifying the user specified by the input to the sensor 206 b. Theuser output 208 b is not limited to output representing the identity ofthe user, but more generally may represent any data relating to theuser.

Sensor 206 c is a device sensor, which receives device input 214 c andgenerates, based on input 214 c, output 208 c representing a device,such as one of the devices 124 a-c of the system 100. The device output208 c during a particular sample period may, for example, represent adevice currently used by the user represented by the output 208 b ofuser identification sensor 206 b during the sample period. The devicesensor 206 c may, for example, obtain input 214 c representing a deviceserial number or other unique identifier of the device, and providedevice output 208 c uniquely identifying the device. The device output208 c is not limited to output representing the identity of the device,but more generally may represent any data relating to the device, suchas data representing any aspect of the device's current configuration,such as audio volume, screen brightness, and whether any particularinput or output components of the device currently are enabled ordisabled.

Sensor 206 d is an application sensor, which receives application input214 d and generates, based on input 214 d, output 208 d representing thestate of one or more software applications (which includes any kind ofsoftware, such as operating systems, application programs, and web-basedapplications). For example, the application sensor output 208 d during aparticular sample period may, for example, represent the state of one ormore software applications executing on a device. The application output208 d during a particular sample period may, for example, represent thestate of one or more software applications executing on the devicerepresented by the output 208 c of device sensor 206 c, or the state ofone or more software applications being executed by or on behalf of theuser represented by the output 208 b of the user sensor 206 b, duringthe same sample period. The application sensor output 208 d may, forexample, indicate which applications currently are executing, whichapplication(s) is/are in the foreground, which application has the inputfocus, which application(s) currently is/are providing user output, andwhich application(s) currently is/are receiving user input. Theapplication sensor 206 d may obtain input 214 d from any source, such asan operating system of the device represented by device sensor output208 c, or from applications by using application program interface (API)calls to such applications.

Sensor 206 e is a message sensor, which receives message input 214 eand, based on input 214 e, generates output 208 e representinginformation relating to one or more messages. Output 208 e may, forexample, represent a communication mode of the message (e.g., whetherthe message is an email message, a text message, or a live voice call),data from the message (such as the body of an email message, audio froma voice call, or text transcribed from a voice message), metadata of themessage (such as a message header or metatag), the composition state ofthe message (e.g., whether the message currently is being composed orhas already been composed), the manifestation state of the message(e.g., whether the message currently is being manifested), thetransmission state of the message (e.g., whether the message currentlyis queued for transmission, attempted to be transmitted, or beingtransmitted), and the transmission direction of the message (e.g.,whether the message currently is being sent or received by the user,device, or application represented by output 208 b, 208 c, or 208 d,respectively). The message sensor 206 e may obtain input 214 e from anysource, such as an operating system of the device represented by devicesensor output 208 c or by using application program interface (API)calls to individual applications.

Sensor 206 f is a location sensor, which receives location input 214 fand, based on input 214 f, generates output 208 f representinginformation relating to a current location of either or both of the userrepresented by user output 208 b and the device represented by deviceoutput 208 c. The location sensor 206 f may obtain input 214 f from anysource, such as a Global Positioning System (GPS) device, a radiofrequency identification (RFID) tag, or manual user input. The locationsensor output 208 f may represent the current location in any of avariety of forms, such as a latitude-longitude combination, or by one ormore labels representing one or more categories of location (e.g., work,home, theater, restaurant). The location sensor 206 f may, alternativelyor additionally, obtain input 214 f relating to and provide output 208 frepresenting the proximity of the user and/or device to another userand/or device. Proximity data may, for example, be received directlyfrom another device using infrared (IR) signals, or by comparinglocations of user or devices to each other. Proximity output 208 f mayrepresent, for example, any one or more of the following: the degree ofproximity (e.g., distance) to another device, the identity of theproximate device, and whether the device represented by device output208 c is proximate to another device of interest.

Sensor 206 g is a velocity sensor, which generates output 208 grepresenting information relating to a current velocity of either orboth of the user represented by user output 208 b and the devicerepresented by device output 208 c. The velocity sensor 207 g may obtaindata from any source, such as any of the sources from which the locationsensor 206 f may obtain data. The velocity sensor 206 g may,alternatively or additionally, obtain data relating to and provideoutput 208 g representing the current acceleration of the current userand/or the current device.

Sensor 206 h is an activity sensor, which receives activity input 206 hand, based on input 206 h, generates output 208 h representinginformation relating to a current activity in which the current userand/or the current device is engaged. Examples of activities are writinga message, reading a message, writing a document, reading a document,engaging in a voice call, listening to a voice message, and providinginput of any kind to the current device. The activity sensor 206 h mayobtain input 214 h from any source, such as from any user input device(e.g., keyboard, mouse, touchpad, touchscreen, or microphone) or bymaking API calls to software such as operating systems, applicationprograms, and device drivers.

Sensor 206 i is a calendar sensor, which receives calendar input 214 iand, based on input 214 i, generates output 208 i representinginformation relating to data stored in a calendar of the current userand/or a calendar of the current device. Calendar output 208 i mayrepresent, for example, the presence or absence of an appointment at ornear the current time, and any information relating to any appointmentat or near the current time, such as the appointment's start time, endtime, duration, location, priority (e.g., high or low), category, andattendee list.

The calendar sensor 206 i may obtain calendar input 214 i from anysource, such as a calendar application external to the system 200 (e.g.,Microsoft Outlook, Apple iCal, Google calendar), a calendar internal tothe system 200, or a combination of both. The calendar sensor 206 i mayobtain calendar input 214 i from external calendar applications usingapplication program interfaces (APIs) provided by such external calendarapplications. In some embodiments, the calendar sensor 206 i solelyobtains calendar input 214 i from one or more sources external to thesystem 200, in which case the system 200 may not create or edit datawithin the calendars maintained by such external sources.

In embodiments that use both a calendar internal to the system and oneor more external calendars, such internal and external calendars mayinteract with each other in a variety of ways. For example, the internalcalendar may override the external calendars in the case of a conflictbetween the two, or vice versa. As another example, the internalcalendar may be combined with the external calendars, such as byaggregating the appointments on the internal calendar and externalcalendar into a single combined calendar.

Referring to FIG. 10, a diagram is shown of a system 1000 including acalendar 1002 according to one embodiment of the present invention. Thecalendar 1002 may include one or more appointment records. Eachappointment record represents a corresponding appointment. Threeappointment records 1004 a-c are shown in FIG. 10 as an example.Although for ease of explanation the appointment records 1004 a-c may bereferred to herein as the “appointments” that are represented by theappointment records 1004 a-c, it should be understood that theappointment records 1004 a-c may be tangibly stored in acomputer-readable medium and contain data that represents thecorresponding appointments. As a result, the elements of the appointmentrecords 1004 a-c may themselves be tangibly stored in acomputer-readable medium and contain data that represents theinformation described below.

In the particular embodiment shown in FIG. 10, appointment 1004 aincludes a start time 1006 a and an end time 1008 a, which mayalternatively be implemented, for example, using the start time 1006 aand a duration (not shown). The appointment 1004 a also includes avariety of optional elements, such as repeat logic 1010 a (whichspecifies when the appointment 1004 a should repeat), a user identifier1012 a to identify the user associated with the appointment 1004 a(e.g., the user who created the appointment 1004 a), an attendee list1014 a specifying one or more attendees of the appointment, a locationidentifier 1016 a specifying a location of the appointment 1004 a, apriority identifier 1018 a specifying a priority of the appointment 1004a (e.g., high, medium, or low), and a category list 1020 a specifyingone or more categories associated with the appointment 1004 a.

Although the other appointments 1004 b-c may contain similar elements tothe elements of the appointment 1004 a, such elements are not shown inFIG. 10 for ease of illustration. The values of the elements ofappointments 1004 b-c, however, may differ from the values ofcorresponding elements of appointment 1004 a. For example, the starttime of appointment 1004 b may differ from the start time 1006 a ofappointment 1004 a.

The range of times associated with an appointment (such as the range oftimes defined by the difference between the start time 1006 a and theend time 1008 a) is referred to herein as the appointment's “timeperiod.” The term “time period,” as used herein, may include one or moredates. For example, Nov. 1, 2011 from 10:00 am to 11:00 am is an exampleof a time period as that term is used herein. As another example, Nov.1, 2011 at 10:00 am through Nov. 2, 2011 at 8:00 am is an example of atime period as that term is used herein. As yet another example, 1:00 pmthrough 3:00 pm is an example of a time period as that term is usedherein.

Referring to FIG. 11, a flowchart is shown of a method 1100 for creatingappointments on a calendar according to one embodiment of the presentinvention. The method 1100 receives first input specifying a first timeperiod (operation 1102). The first input may, for example, be receivedfrom a user. The first time period may be selected arbitrarily by theuser. In other words, the first time period need not be selected usingan algorithm or fit any pattern, such as the pattern, “weekdays from9:00 am to 5:00 pm.” Instead, the first time period may be any range oftimes, such as Nov. 1, 2011 from 10:00 am to 11:00 am. The method 1100creates a first appointment on a calendar, wherein the first appointmenthas the first time period (operation 1104).

The method 1100 receives second input specifying a second time period(operation 1106). The second input may, for example, be received fromthe same user as the first input. The second time period may be selectedarbitrarily by the user. The method 1100 creates a second appointment onthe calendar as the first appointment, wherein the second appointmenthas the second time period (operation 1108). The method 1100 maycontinue in a similar manner for any additional number of appointments.

The first and second time periods (associated with the first and secondappointments, respectively) may be arbitrary in relation to each other.For example, the first and second time periods need not fit a pattern,such as “weekdays from 9:00 am to 5:00 pm.” Either or both of the firstand second appointments may be non-repeating (i.e., one-time)appointments, whether because such appointments lack repeat logic orbecause the repeat logic of such appointments specifies that suchappointments do not repeat.

Although appointment times may, for example, be selected arbitrarily, anappointment may define its associated time period in any of a variety ofways. For example, an appointment may define its associated time periodin terms of any one or more of the following:

-   -   a particular date and a particular time range within that date        (e.g., Nov. 1, 2011 from 10:00 am to 11:00 am);    -   a time range (e.g., 9 am-5 pm), which may thereby specify that        time range on every day;    -   a start date (e.g., Nov. 1, 2011), a particular time range        (e.g., 10:00 am to 11:00 am), and a repeating date function        (e.g., daily, weekly, the first day of every month, the third        Wednesday of every month); or    -   a particular date, which may thereby specify all times during        that date.

As mentioned above, the time sensor 206 a may implement variousfunctions related to timers. Such functions may be implemented, eitheralternatively or additionally, by the calendar sensor 206 j. A conditionof a logic module may define a particular timer, and the condition maybe satisfied when the particular timer has expired, or when theparticular timer has started running but not yet expired. The conditionmay, for example, specify a time at which the timer is to start running(such as by defining a condition, upon satisfaction of which the timeris to start running). Alternatively, for example, the timer may bestarted in response to user input at a user-selected time.

A timer is associated with a start time and either a duration or an endtime. Although at least some timers may be implemented in the same wayas calendar appointments, timers need not be implemented as calendarappointments. For example, a timer may be started at any time withoutadding an entry representing the timer to a calendar. Furthermore, atimer associated with a duration may be started and stopped any numberof times. When the timer is first started (the timer's “initial starttime”), the timer's “running time” may be initialized to zero and beginto accumulate in real time (i.e., to accumulate one second of runningtime for each second of real time). The timer's running time may stopaccumulating if and in response to stopping the timer. If the timer isstarted again, the timer's running time may resume its real-timeaccumulation. The timer may only expire when its running time equals orexceeds its associated duration. Some timers may not be allowed to bestopped once they have started, in which case the timer's running timemay be equal to the amount of real time that has elapsed since thetimer's initial start time.

The total running time of a timer may be reset (e.g., to zero or someother number) upon the satisfaction of a condition. For example, thetotal running time of a timer may be reset after some predeterminedamount of real time has elapsed since the timer's initial start time,since the timer was last reset (e.g., one minute, one hour, one day, orone week), or upon the occurrence of a real time that satisfies acondition (e.g., the beginning of a new calendar minute, hour, day, orweek). Such timers may only expire if their total running time equals orexceeds their associated duration before they are reset.

Calendar appointments, such as appointments 1004 a-c, may, but need notinclude or be associated with logic modules. For example, appointment1004 a may include or otherwise be associated with one or more logicmodules, in which case such logic modules may only be applied during thetime period of the appointment 1004 a. In other words, the time periodof the appointment 1004 a may be treated as an implicit condition of thelogic modules associated with the appointment.

Appointments need not, however, contain or otherwise be associated withlogic modules. Even if an appointment does not contain and is nototherwise associated with a logic module, the application of the logicmodule may still be influenced by the appointment. For example, acondition of a logic module may be satisfied if the current real time(or other time 208 a output by the time sensor 206 a) falls within thetime period of any appointment on a calendar (e.g., any calendar or aspecified calendar). Such a condition will be satisfied, and therebycause the corresponding action to be performed, in response to detectingthat the current real time (or other time 208 a output by the timesensor 206 a) falls within the time period of any calendar appointment.Such a condition need not be contained within or otherwise reference anyparticular calendar appointment.

As another example, a condition of a logic module may be satisfied ifthe current real time (or other time 208 a output by the time sensor 206a) falls outside the time period of any appointment on a calendar (e.g.,any calendar or a specified calendar). Such a condition will besatisfied, and thereby cause the corresponding action to be performed,in response to detecting that the current real time (or other time 208 aoutput by the time sensor 206 a) falls outside the time period of anycalendar appointment. Such a condition need not be contained within orotherwise reference any particular calendar appointment.

Any condition that requires the presence or absence of a calendarappointment may be further narrowed by additional conditions, such asconditions requiring the user, attendee list, location, priority, and/orcategory list of the appointment to satisfy one or more criteria.Examples of such compound calendar-related conditions are: “appointmentswithin business hours,” “appointments on weekends,” “appointments havinghigh priority,” “appointments not having low priority,” and“appointments in the marketing category.” Although such compoundconditions may be satisfied by one or more calendar appointments, theydo not make specific reference to any particular calendar appointment(e.g., by name or other unique identifier).

As these examples illustrate, calendar appointments may be created,stored, and modified independently of the logic modules that are appliedto such calendar appointments. The logic modules that are applied tocalendar appointments may, for example, be stored separately from thecalendar appointments themselves. One benefit of embodiments in whichcalendar appointments are independent of logic modules is that suchembodiments may be implemented in connection with existing calendarapplications without the need to require such applications to storelogic modules within or in association with calendar appointments. As aresult, users of such existing calendar applications may continue to usethem in the existing manner, by adding, editing, and deleting calendarappointments without having to specify logic to apply to each calendarappointment. Instead, logic modules that were created (e.g., manually bythe user) before the calendar appointments were created or that arecreated after the calendar appointments are created may be applied tosuch calendar appointments in any of the ways described above, even if:(1) such logic modules are not contained within the calendarappointments; (2) the calendar appointments are not associated with thelogic modules; and (3) the logic modules do not make specific referenceto particular calendar appointments.

Calendar-based features of embodiments disclosed herein may be used inconnection with any other embodiments disclosed herein. As a result, forexample, in response to detection of the occurrence of an appointmentscheduled on a calendar, embodiments of the present invention mayperform actions in connection with messages transmissible via two ormore different modes of communication (e.g., any two or more of an emailmessage, a text message, and a live voice call). Calendar-based featuresof embodiments disclosed herein may, however, be used independently ofvarious features disclosed herein. For example, calendar-based featuresof embodiments disclosed herein may be used in connection with profilesor without the use of profiles.

The method 300 f of FIG. 3F may be used to apply logic modules that areinfluenced by calendar appointments, i.e., logic modules that include acondition that is satisfied by the presence or absence of a calendarappointment. In operation 366 of method 300 f, the method 300 f mayidentify a current time, such as a current real time output by the timesensor 206 a. Furthermore, operation 366 may include determining whetherthe identified current time falls within the time period of anappointment on a calendar. More generally, operation 366 may includedetermining whether the context data satisfies the condition of thecurrent logic module, as described in more detail above in connectionwith operation 354 of FIG. 3E.

An example of a result of performing method 1100 (FIG. 11) and method300 f (FIG. 3F) is illustrated by the method 1200 of FIG. 12. The method1200 determines that the current time (e.g., the current real time)falls within the time period of the first calendar appointment createdin operation 1104 of FIG. 11 (operation 1202). Operation 1202 mayinclude determining that the real time is equal to or later than thestart time of the first appointment. In response to the determination ofoperation 1202, the method 1200 performs a first action, such as anaction specified by a first logic module having a condition that issatisfied by the first appointment (operation 1204). Operation 1204 mayinclude determining that the first logic module's condition is satisfiedby the first appointment. Operation 1204 may be performed repeatedlyand/or continuously until some other time, such as the determinationdescribed below in connection with operation 1206.

The method 1200 determines that the current time falls outside the timeperiod of the first calendar appointment (operation 1206). Operation1206 may include determining that the real time is equal to or laterthan the end time of the first appointment, or that the duration of thefirst appointment has elapsed. In response to the detection of operation1206, the method 1200 performs a second action (operation 1208).Operation 1208 may include determining that the first logic module'scondition is no longer satisfied.

Such a second action, may for example, be specified by the same firstlogic module that specified the first action. In this embodiment, thefirst action acts as a “start appointment action” that is performed upondetection of the start of the first appointment (and possibly for theduration of the first appointment), while the second action acts as an“end appointment action” that is performed upon detection of the end ofthe first appointment (and possibly for some period of time thereafter).

Instead of or in addition to performing the second action, operation1208 may include terminating performance of the first action.

The method 1200 determines that the current time (e.g., the current realtime) falls within the time period of the second calendar appointmentcreated in operation 1108 of FIG. 11 (operation 1210). Operation 1210may include detecting that the real time is equal to or later than thestart time of the second appointment. In response to the determinationof operation 1210, the method 1200 performs a third action, such as anaction specified by a second logic module having a condition that issatisfied by the second appointment (operation 1212). Operation 1212 mayinclude determining that the second logic module's condition issatisfied by the second appointment.

The method 1200 determines that the current time falls outside the timeperiod of the second calendar appointment (operation 1214). Operation1214 may include detecting that the real time is equal to or later thanthe end time of the second appointment, or that the duration of thesecond appointment has elapsed. In response to the determination ofoperation 1214, the method 1200 performs a fourth action (operation1216). Operation 1216 may include determining that the first logicmodule's condition is no longer satisfied.

Such a fourth action, may for example, be specified by the same secondlogic module that specified the third action. Instead of or in additionto performing the fourth action, operation 1216 may include terminatingperformance of the third action.

The first and second actions may be any actions, such as block, allow,forward, defer, change mode, change contents, or respond actions. Thefirst action may differ from the second action. The third action maydiffer from the fourth action. The third action may differ from thefirst action.

Various “out of office assistants” are well known. An out of officeassistant typically sends an automated response (e.g., by email) to allof a user's incoming messages (e.g., email messages) while the out ofoffice assistant is activated. Embodiments of the present invention may,for example, be used to implement a dynamic, context-sensitive, andmulti-modal out of office assistant. For example, conventional out ofoffice assistants typically send a single response message (such as, “Iam out of the office until Tuesday and will respond to email upon myreturn”) in response to all incoming email messages. In contrast,embodiments of the present invention may select a response message thatis dependent upon the current context. In other words, in response toreceiving an incoming message (such as an email message), embodiments ofthe present invention may generate a response message based on thecurrent context and then send the generated response message to thesender of the message. Such a message may, for example, state that “I amin a meeting until 4:00 pm and will not be able to respond to you untilat least that time,” where such a message is generated based on acalendar appointment that is scheduled to end at 4:00 pm.

As this example illustrates, such auto-response messages may varydepending on the context. As a result, embodiments of the presentinvention may: (1) receive a first message at a first time; (2) generatea first response message based on a first context at the first time; (3)send the first response message to the sender of the first message; (4)receive a second message at a second time; (5) generate a secondresponse message based on a second context at the second time, whereinthe second response message differs from the first response message; and(6) send the second response message to the sender of the secondmessage.

As another example, conventional out of office assistants typicallyallow messages (e.g., email messages) to be received and fornotifications of such messages to be generated to the recipient whilethe out of office assistant is activated. In contrast, embodiments ofthe present invention may perform actions, such as blocking ordeferring, on incoming messages while the out of office assistant isactive. Out of office assistants implemented according to embodiments ofthe present invention may, therefore, perform multiple actions on eachincoming message (e.g., block and respond or defer and respond). As oneparticular example, out of office assistants implemented according toembodiments of the present invention may defer incoming messages whilethe out of office assistant is active and terminate deferral of incomingmessages in response to deactivation of the out of office assistant. Asa result, for example, messages that were withheld from the recipient'sinbox while the out of office assistant was active may be inserted intothe recipient's inbox in response to deactivation of the out of officeassistant.

Out of office assistants implemented according to embodiments of thepresent invention may be applied to messages transmissible via any oneor more communication modes. For example, a single out of officeassistant may be applied to messages transmissible via two or morecommunication modes (e.g., any two or more of email, text messages, andlive voice calls). An automatic response to an incoming message may, forexample, be sent by a predetermined communication mode (e.g., email)regardless of the communication mode via which the incoming message wasreceived, such that the out of office assistant responds to messagesreceived via all communication modes using the predeterminedcommunication mode. As another example, an automatic response to anincoming message may be sent by the communication mode by which theincoming message was received.

Referring to FIG. 13, a dataflow diagram is shown of a system 1300 forimplementing an out of office assistant, referred to more generallyherein as an auto-responder, according to one embodiment of the presentinvention. Referring to FIG. 14, a flowchart is shown of a method 1400performed by the system 1300 according to one embodiment of the presentinvention.

A sender 1350 sends a first incoming message 1302 a. The sender 1350may, for example, be a person, a computer, or a software application.The first incoming message 1302 a may identify the sender 1350 in any ofa variety of ways, such as by including or referencing an identifier ofthe sender 1350, such as an email address, telephone number, or IPaddress of the sender 1350. These are merely examples of ways in whichthe first incoming message 1302 a may be associated with the sender1350.

The incoming message 1302 a may be addressed to a recipient 1352. Therecipient 1352 may, for example, be a person, a computer, or a softwareapplication. The first incoming message 1302 a may identify therecipient 1352 in any of a variety of ways, such as by including orreferencing an identifier of the recipient 1352, such as an emailaddress, telephone number, or IP address of the recipient 1352. Theseare merely examples of ways in which the first incoming message 1302 amay be associated with the recipient 1352.

The first incoming message 1302 a is an “incoming” message from theperspective of the recipient 1352. For example, the first incomingmessage 1302 a may be received by, or attempted to be transmitted to, aserver (e.g., email server or text message server) associated with therecipient 1352, a device associated with (e.g., owned and/or operatedby) the recipient 1352, a software application (e.g., an email clientapplication, text message client application, or VoIP clientapplication) associated with the recipient 1352, or a user account(e.g., email account text message account, telephone number, VoIPhandle, or social networking account) associated with the recipient1352.

The system 1300 includes a message detection module 1304, which detectsthe first incoming message 1302 a (FIG. 14, operation 1402). The messagedetection module 1304 may generate message detection output 1306 a inresponse to the detection. The message detection output 1306 a may, forexample, indicate that the message detection module 1304 has detectedthe first incoming message 1302 a. Additionally or alternatively, themessage detection output 1306 a may include some or all of the firstincoming message 1302 a and/or data derived from the first incomingmessage 1302 a.

The system 1300 also includes context data 202 a, which may include someor all of the context data 202 of FIG. 2 at a first time, such as thetime at which the message detection module 1304 detects the firstincoming message 1302 a. For example, the context data 202 a may includedata representing the current context of the recipient 1352 at the firsttime. The system 1300 also includes an auto-response activation module1308, which identifies (e.g., receives as input) the context data 202 a(FIG. 14, operation 1404).

The auto-response activation module 1308 also determines whether acondition 1309 is satisfied by the context data 202 a (FIG. 14,operation 1406). The condition 1309 may be of any kind disclosed herein,such as a condition associated with a profile, such as a system profile,a device profile, or a profile of the recipient 1352. For example, theauto-response activation module 1308 may, in operation 1406, determinewhether:

-   -   the first time falls within a first time period (such as a time        period of an appointment in the recipient 1352's calendar, or a        time that is before the expiration of a timer, such as a timer        initiated in response to input from the recipient 1352);    -   the first incoming message 1302 a is transmitted via a        particular communication mode (e.g., an email communication        mode, a text message communication mode, or a voice call        communication mode);    -   a task performed by a device associated with the recipient 1352        at the first time satisfies the condition 1309;    -   a location of a device associated with the recipient 1352 at the        first time satisfies the condition 1309;    -   a velocity of a device associated with the recipient 1352 at the        first time satisfies the condition 1309;    -   a profile associated with the recipient 1352 is active.

The auto-response activation module 1308 generates auto-responseactivation output 1310 a indicating whether the condition 1309 issatisfied by the context data 202 a.

Operation 1406 may include determining whether the message detectionoutput 1306 a satisfies the condition 1309. For example, theauto-response activation module 1308 may determine whether the firstincoming message 1302 a satisfies the condition 1309.

The auto-response activation module 1308 need not, however, receive asinput or otherwise take into account the message detection output 1306 aor the first incoming message 1302 a when determining whether thecondition 1309 is satisfied by the context data 202 a. For example, theauto-response activation module 1308 may, in operation 1406, determinewhether a subset of the context data 202 a satisfies the condition 1309,where the subset does not include data representing any data or metadataof the first incoming message 1302 a. For example, the subset may notinclude data representing any time associated with the first incomingmessage 1302 a, such as the first incoming message 1302 a's receipttime. As a result, the auto-response activation module may determinewhether the condition 1309 is satisfied by the context data 202 aindependently of the receipt time of the first incoming message 1302 a.

If the auto-response activation module 1308 determines that thecondition 1309 is satisfied by the context data 202 a then, in responseto the determination, a response message sending module 1318 in thesystem 1300 may send a first response message 1316 a to the sender 1350(FIG. 14, operation 1408). The first response message 1316 a may beselected and sent in any of a variety of ways. FIGS. 13 and 14illustrate one example of a way in which the first response message 1316a may be selected and sent, but this example does not constitute alimitation of the present invention. In particular, although in theexample of FIGS. 13 and 14 the first response message 1316 a isdependent on and may vary based on the context data 202 a, this ismerely an example and does not constitute a limitation of the presentinvention. Alternatively, for example, some or all of the first responsemessage 1316 a may be fixed and therefore be independent of the contextdata 202 a.

The system 1300 includes an auto-response message generation module1312, which may select the first response message 1316 a based on thecontext data 202 a (FIG. 14, operation 1410). The response messagesending module 1318 may then send the selected first response message1316 a to the sender 1350 (FIG. 14, operation 1412). Note that althoughoperations 1408 and 1412 both involve sending the first response message1316 a to the sender 1350, this does not imply that the first responsemessage 1316 a is sent twice. Rather, FIG. 14 illustrates that, in oneembodiment of the present invention, the overall operation of sending1408 may include first selecting 1410 the first response message 1316 aand then sending 1412 the first response message 1316 a.

Some or all of operations 1402-1412 may be repeated for additionalincoming messages. For example, assume that, after the sender 1350 sendsthe first incoming message 1302 a, the sender 1350 sends a secondincoming message 1302 b, which may have any of the characteristics ofthe first incoming message 1302 a described above. The content (dataand/or metadata) of the second message 1302 b may be the same as ordiffer from the content (data and/or metadata) of the first message 1302a. For ease of explanation but without limitation, in the followingexample the second incoming message is associated with (e.g., addressedto) the recipient 1352. The techniques disclosed herein, however, mayalternatively be applied if the second incoming message 1302 b is sentto a recipient other than the recipient 1352. Similarly, the techniquesdisclosed herein may alternatively be applied if the second incomingmessage 1302 b is sent by a sender other than the sender 1350.

The message detection module 1304 detects the second incoming message1302 a (FIG. 14, operation 1422). The message detection module 1304 maygenerate message detection output 1306 b in response to the detection.The message detection output 1306 b may, for example, indicate that themessage detection module 1304 has detected the second incoming message1202 b. Additionally or alternatively, the message detection output 1306b may include some or all of the second incoming message 1302 b and/ordata derived from the second incoming message 1302 b.

The system 1300 also includes context data 202 b. For example, contextdata 202 a of FIG. 13 may represent a state of (or record in) thecontext data 202 of FIG. 2 at a first time, such as the time at whichthe message detection module 1304 detects the first incoming message1302 a, and the context data 202 b of FIG. 13 may represent a state of(or record in) the context data 202 of FIG. 2 at a second time, such asthe time at which the message detection module 1304 detects the secondincoming message 1302 b. The auto-response activation module 1308identifies (e.g., receives as input) the context data 202 b (FIG. 14,operation 1424).

The auto-response activation module 1308 determines whether condition1309 is satisfied by the context data 202 b (FIG. 14, operation 1426).The auto-response activation module 1308 generates auto-responseactivation output 1310 b indicating whether the condition 1309 issatisfied by the context data 202 b.

Operation 1426 may include determining whether the message detectionoutput 1306 b satisfies the condition 1309. For example, theauto-response activation module 1308 may determine whether the secondincoming message 1302 b satisfies the condition 1309.

The auto-response activation module 1308 need not, however, receive asinput or otherwise take into account the message detection output 1306 bor the first incoming message 1302 b when determining whether thecondition 1309 is satisfied by the context data 202 b. For example, theauto-response activation module 1308 may, in operation 1426, determinewhether a subset of the context data 202 b satisfies the condition 1309,where the subset does not include data representing any data or metadataof the second incoming message 1302 b. For example, the subset may notinclude data representing any time associated with the second incomingmessage 1302 b, such as the second incoming message 1302 b's receipttime. As a result, the auto-response activation module may determinewhether the condition 1309 is satisfied by the context data 202 bindependently of the receipt time of the second incoming message 1302 b.

If the auto-response activation module 1308 determines that thecondition 1309 is satisfied by the context data 202 b then, in responseto the determination, the response message sending module 1318 may senda second response message 1316 b to the sender 1350 (FIG. 14, operation1428). The second response message 1316 b may be selected and sent inany of the variety of ways disclosed above in connection with selectionand sending of the first response message 1316 a.

Auto-response message generation module 1312 may select the secondresponse message 1316 b based on the context data 202 b (FIG. 14,operation 1430). The response message sending module 1318 may then sendthe selected second response message 1316 b to the sender 1350 (FIG. 14,operation 1432).

As the description above implies, if the context data 202 changes (e.g.,if context data 202 a differs from context data 202 b), the outcomesproduced by operations 1402-1412 may differ from the outcomes producedby operations 1422-1432. For example, the system 1300 may send the firstresponse message 1316 a in response to the first context data 202 a, butnot send the second response message 1316 b in response to the secondcontext data 202 b. As another example, the first response message 1316a may differ from the second response message 1316 b based ondifferences between the first context data 202 a and the second contextdata 202 b. These are merely examples, however, and do not constitutelimitations of the present invention. Alternatively, for example, thefirst response message 1316 a may not differ from the second responsemessage 1316 b.

The auto-response activation module 1308 is optional. For example, ifthe auto-response activation module 1308 is omitted from the system1300, then the auto-response message generation module 1312 and theresponse message sending module 1318 may perform the operationsdisclosed herein whether or not the context data 202 a satisfies thecondition 1309, and whether or not the context data 202 b satisfies thecondition 1309.

The auto-response message generation module 1312 may select the firstand second response messages 1316 a-b in any of a variety of ways.Although for ease of explanation the description below will describeexamples of ways in which the first response message 1316 a may beselected, the same techniques may be applied to select the secondresponse message 1316 b. The auto-response message generation module1312 may, for example select the first response message 1316 aindependently of content of the first incoming message 1302 a. Suchcontent may include, for example, any one or more of the following: dataidentifying the sender 1250 (e.g., the sender's email address and/or IPaddress), subject of the message 1302 a, and body of the message 1302 a.

The auto-response message generation module 1312 may select the firstresponse message 1316 a from a plurality of response messages based onthe context data 202 a. The auto-response message generation module 1312may, for example, have access to a repository (not shown) of responsemessages, such as response messages previously input by a user, such asthe recipient 1352, and then select the first response message 1316 afrom such a repository.

Alternatively, for example, the auto-response message generation module1312 may generate the first response message 1316 a based on the contextdata 202 a. The auto-response message generation module 1312 may, forexample, include data derived from the context data 202 a in the firstresponse message 1316 a. For example, if the context data 202 aindicates that the recipient 1352 is scheduled to be in a meeting until4:00 pm, the auto-response message generation module 1312 may includethe text “4:00 pm” in the first response message 1316 a. For example,the first response message 1316 a may be, “I am in a meeting until 4:00pm and will return your message as soon as possible after the meeting isover.”

As this example illustrates, the auto-response message generation module1312 may also include data not derived from the context data 202 a inthe first response message 1316 a. In the example above, the text “I amin a meeting until” and “and will return your message as soon aspossible after the meeting is over” are examples of data that areincluded in the first response message 1316 a and which are not derivedfrom the context data 202 a.

Such a message, which includes both data derived from the context data202 a and data not derived from the context data 202 a, may, forexample, be generated by the auto-response message generation module1312 as follows. The system 1300 may include an auto-response messagetemplate 1314. Although only one auto-response message template 1314 isshown in FIG. 13, the system 1300 may include any number ofauto-response message templates.

In general, the auto-response message template 1314 contains both fixedcontent specification data and variable content specification data. Thefixed content specification data specifies content that is independentof context. In the example above, the text “I am in a meeting until” and“and will return your message as soon as possible after the meeting isover” are examples of fixed content specification data. The variablecontent specification data specifies content that varies depending oncontext.

The auto-response message template 1314 may take any of a variety offorms. For example, the auto-response message template 1314 may take theform of a text string in which the fixed content specification data isrepresented by non-delimited text and in which the variable contentspecification data is represented by one or more tokens in the form ofdelimited text. An example of such a text string is the following: “I amin a meeting until <CurrentAppointment.EndTime> and will return yourmessage as soon as possible after the meeting is over.” In this example,the token “<CurrentAppointment.EndTime>” is delimited text (which isdelimited by the delimiters “<” and “>”) representing the end time ofthe current appointment in the calendar of the recipient 1352 (e.g., theappointment occurring at the time of detection of the first incomingmessage 1302 a).

To generate the first response message 1316 a based on the context data202 a and the auto-response message template 1314, the auto-responsegeneration module 1312 may make a copy of the auto-response messagetemplate 1314 and substitute, for each token in the template 1314, dataderived from the context data 202 a and the token. In the example above,the text “4:00 pm” is an example of data derived from the context data202 a and the token “<CurrentApointment.EndTime>”. As a result, theauto-response message generation module 1312 may include, in the firstresponse message 1316 a: (1) data derived from the fixed contextspecification data independently of the context data 202 a (e.g., thetext “I am in a meeting until” and “and will return your message as soonas possible after the meeting is over”); and (2) data derived from thevariable content specification data and the context data 202 a.

The system 1300 may generate or otherwise obtain the auto-responsemessage template 1314 in any of a variety of ways. For example, a user(such as the recipient 1352) may provide input representing theauto-response message template 1314, thereby enabling the system 1300 togenerate the template 1314 from such user input.

As mentioned above, the auto-response generation module 1312 may selectthe first response message 1316 a based on some or all of the contextdata 202 a. For example, the auto-response generation module 1312 mayselect the first response message 1316 a based on one or more of thefollowing: a time associated with the first context data 202 a (e.g.,the time at which the first incoming message 1302 a is detected), anappointment associated with the recipient 1352, a communication mode viawhich the first incoming message 1302 a is transmitted (e.g., an emailcommunication mode, a text message communication mode, or a voice callcommunication mode), an identifier associated with the sender 1250, atask performed by a device associated with the recipient 1352 at thefirst time (e.g., composing a message from the recipient 1352 ormanifesting a message to the recipient 1352), a location of therecipient 1352 at the first time, and a velocity of the recipient 1352at the first time.

As described above, the content of the first response message 1316 a mayvary depending on the context data 202 a. As particular examples:

-   -   If the first incoming message 1302 a is determined to be        transmitted via an email communication protocol, then first        content may be selected and included within the first response        message 1316 a. If the first incoming message is not determined        to be transmitted via an email communication protocol, then        second content may be selected and included within the first        response message 1316 a, wherein the first content differs from        the second content.    -   If the first incoming message 1302 a is determined to be        transmitted via a text message protocol, then first content may        be selected and included within the first response message 1316        a. If the first incoming message is not determined to be        transmitted via a text message protocol, then second content may        be selected and included within the first response message 1316        a, wherein the first content differs from the second content.    -   If the first incoming message 1302 a is determined to be        transmitted via a voice communication protocol, then first        content may be selected and included within the first response        message 1316 a. If the first incoming message is not determined        to be transmitted via a voice communication protocol, then        second content may be selected and included within the first        response message 1316 a, wherein the first content differs from        the second content.

The first response message 1316 a may be transmitted via the same ordifferent communication mode as the first incoming message 1302 a. Forexample, if the sender 1350 sends the first incoming message 1302 a viaa first communication mode, then the response message sending module1318 may send the first response message 1316 a to the sender 1350 viathe first communication mode, where the first communication mode may,for example, be an email communication mode, a text messagecommunication mode, or a voice call communication mode.

Alternatively, for example, if the sender 1350 sends the first incomingmessage 1302 a via a first communication mode, then the response messagesending module 1318 may send the first response message 1316 a to thesender 1350 via a second communication mode that differs from the firstcommunication mode, where the first communication mode may, for example,be an email communication mode, a text message communication mode, or avoice call communication mode, and wherein the second communication modemay, for example, be an email communication mode, a text messagecommunication mode, or a voice call communication mode.

The system 1300 may perform one or more actions in addition to sendingthe first response message 1316 a to the sender 1350. For example, thesystem 1300 may perform such additional actions in response todetermining that the context data 202 a satisfies the condition 1309.One example of such additional actions are that: (1) the auto-responsemessage generation module 1312 may generate a derived message (notshown) based on the first incoming message 1302 a (such as a copy of thefirst incoming message 1302 a), and (2) the response message sendingmodule 1318 may transmit the derived message to a second recipient (notshown) via a second communication mode that differs from the firstcommunication mode. Such additional actions may be useful, for example,for notifying an assistant of the recipient 1352 that the first incomingmessage 1302 a has been sent to the recipient 1352 in the recipient1352's absence, by effectively forwarding the first incoming message1302 a (or a message derived therefrom) to the assistant.

Another example of an additional action that the system 1300 may performis to allow the first incoming message 1302 a to be transmitted and/ormanifested to the recipient 1352. Such allowance may, for example,include an affirmative action performed by the system 1300, such astransmitting and/or manifesting the first incoming message 1302 a to therecipient 1352, possibly via a different communication mode than thecommunication mode via which the sender 1350 transmitted the firstincoming message 1302 a. Alternatively, for example, such allowance maynot include any affirmative action performed by the system 1300, butinstead, for example, involve not taking any action to prevent the firstincoming message 1302 a from being transmitted and/or manifested to therecipient 1352 (e.g., by an email client application).

Another example of an additional action that the system may perform isto defer one or more of the following: transmission of the firstincoming message 1302 a to the recipient 1352 (e.g., to a deviceassociated with the recipient 1352), manifestation of the first incomingmessage 1302 a to the recipient 1352, and generation of a notificationof the first incoming message 1302 a to the recipient 1352.

As mentioned above, the first incoming message 1202 a may be detected ina first context data 202 a and the second incoming message 1202 a may bedetected in a second context data 202 b. The first and second contexts202 a and 202 b may differ from each other in any of a variety of ways.For example:

-   -   the first context data 202 a may indicate that the recipient        1352 is at a first appointment at a first time, and the second        context data 202 b may not indicate that the recipient 1352 is        at the first appointment at a second time;    -   the first context data 202 a may indicate that a device        associated with the recipient 1352 is performing a first task at        a first time, and the second context data 202 b may not indicate        that the device associated with the recipient 1352 is performing        the first task at a second time;    -   the first context data 202 a may indicate that a device        associated with the recipient 1352 is at a first location at a        first time, and the second context data 202 b may not indicate        that the device associated with the recipient 1352 is at the        first location at a second time;    -   the first context data 202 a may indicate that a device        associated with the recipient 1352 is moving at a first velocity        at a first time, and the second context data 202 b may not        indicate that the device associated with the recipient 1352 is        moving at the first velocity at a second time.

Because information about calendar appointments in the future (e.g.,outside of the current sample period) may be useful, the calendar sensor206 i is not limited to generating output 208 i representing calendarappointments within the current sample period. Rather, for example, thecalendar sensor 206 i may receive input 214 i and generate output 208 irepresenting any number of calendar appointments at any time in the pastor future, such as calendar appointments occurring during the currentcalendar hour, day, week, or month; calendar appointments overlappingwith a period including the current sample period and extending for someamount of time into the future (e.g., one minute, ten minutes, 30minutes, one hour, or four hours); or the next appointment on thecalendar (i.e., the first appointment to appear on the calendar afterthe current sample period, but not including any appointment thatoverlaps with the current sample period).

Sensor 206 j is a user input sensor, which receives user input 214 jand, based on input 214 j, generates output 208 j representing inputprovided by a user, such as the current user, or any of the users 122a-b of the system. User input sensor 206 j may obtain data directly orindirectly from any user input device (e.g., keyboard, mouse, touchpad,touchscreen, or microphone) in response to the user providing input tosuch a device.

The particular context sensors 206 a-j shown in FIG. 2 are merelyexamples and not limitations of the present invention. Embodiments ofthe present invention may use fewer than all of the context sensors 206a-j, sensors other than the sensors 206 a-j shown in FIG. 2, or anycombination thereof.

In general, any of the profiles 110, 112 a-b, and 114 a-c of the system100 of FIG. 1 may be controlled by a corresponding profile controller.For example, referring to the system of FIG. 1F and the method 300 a ofFIG. 3A, a profile controller 140 may receive a request 142 from arequester 144 to read data from a profile 146 controlled by the profilecontroller 140 (operation 302), in response to which the profilecontroller 140 may read the requested data 148 from the correspondingprofile 146 (operation 304) and provide the requested data 148 (oroutput based on the requested data) to the requester 144 (operation306). The request 142 may, for example, be a request to read all of thedata in the profile 146 or a request to read a specified portion of theprofile 146, such as the values of one or more specified parameters inthe profile 146.

Similarly, referring to the system of FIG. 1G and the method 300 b ofFIG. 3B, the profile controller 140 may receive a request 152 from therequester to write data specified by the request 152 to thecorresponding profile 146 (operation 312), in response to which theprofile controller 140 may write the requested data to the correspondingprofile 146 (operation 314), thereby modifying the profile 146 asrequested by the request 152. The request 152 may, for example, be arequest to write data to the entire profile 146 or a request to writedata to a specified portion of the profile 146, such as a request towrite a specified value to a specified parameter of the profile 146.

In the case of FIGS. 1F and 1G, the requester may, for example, be ahuman user, a computer program, or a hardware component. Although onlythe generic profile controller 140 is shown in FIGS. 1F and 1G, itshould be understood that controllers specific to the system profile110, user profiles 112 a-b, and device profiles 114 a-c of FIG. 1A maybe implemented in accordance with the techniques disclosed in connectionwith FIGS. 1F and 1G.

Modifying (e.g., writing a value to) a profile may cause changes to bemade outside of the profile. For example, a device profile may include aparameter whose current value represents a current state of a feature ofthe device associated with the device profile. If the profile controller140 changes the value of such a parameter, the profile controller 140may also make a corresponding change to the state of the feature of theassociated device, or cause such a change to be made. For example, adevice profile associated with a telephone may include a “ring volume”parameter whose current value represents the current ring volume of thetelephone. If the profile controller 140 changes the value of the “ringvolume” parameter (such as by increasing the value to a higher value),the profile controller 140 may also make a corresponding change (e.g.,increase) to the device's ring volume, or cause such a change to bemade. For example, the device may include a mechanism that respondsautomatically to any change in the device's profile by making anappropriate corresponding change to a state of a feature of the device.

In general, any of the logic modules 102 a-c of the system 100 of FIG. 1may be controlled by a corresponding logic module controller. Forexample, referring to the system of FIG. 1 h and the method 300C of FIG.3C, a logic module controller 160 may receive a request 162 from arequester 164 to read data from a logic module 166 controlled by thelogic module controller 160 (operation 322), in response to which thelogic module controller 160 may read the requested data 168 from thecorresponding logic module 166 (operation 324) and provide the requesteddata 168 (or output based on the requested data) to the requester 164(operation 336). The request 164 may, for example, be a request to readone or more of the condition specifiers in the logic module 166 and/or arequest to read one or more of the action specifiers in the logic module166. The output data 168, therefore, may represent one or more of thecondition specifiers in the logic module 166 and/or a request to readone or more of the action specifiers in the logic module 166.

Similarly, referring to the system of FIG. 1I and the method 300 d ofFIG. 3D, the logic module controller 160 may receive a request 172 fromthe requester 164 to write data specified by the request 172 to thecorresponding logic module 166 (operation 332), in response to which thelogic module controller 160 may write the requested data to thecorresponding logic module 166 (operation 334), thereby modifying thelogic module 166 as requested by the request 172. The request 172 may,for example, be a request to modify/delete/add a condition specifierand/or to modify/delete/add an action specifier in the logic module 166.

In the case of FIGS. 1H and 1I, the requester 164 may, for example, be ahuman user, a computer program, or a hardware component. For example,the read request 162 and/or write request 172 may be input generated inresponse to the manual action of a human user.

Logic modules 102 a-c may be applied to the context data 202 to performthe actions 106 a-c specified by the logic modules 102 a-c if thecontext data 202 satisfies the conditions 104 a-c specified by the logicmodules 102 a-c. For example, referring to the system of FIG. 1J and themethod 300 e of FIG. 3E, a logic module execution unit 180 may beassociated with logic module 102 a. Although not shown in FIG. 1J,similar logic module execution units may be associated with logicmodules 102 b-c.

Logic module execution unit 180 receives some or all of context data 202as input (operation 352). Logic module execution unit 180 may, forexample, receive: (1) only a single one of the records 210 a-n withincontext data 202 as input, such as most recently-generated record, orthe record whose time field 212 a represents a time that is closest tothe current real time; (2) only a subset of the records 210 a-nassociated with a particular one of the users 122 a-b; or (3) only asubset of the records 210 a-n associated with a particular one of thedevices 124 a-c.

Logic module execution unit 180 determines whether the received contextdata 202 satisfies the condition specified by condition specifier 104 aof logic module 102 a (operation 354). If the logic module executionunit 180 determines that the received context data 202 satisfies thecondition, then, in response to the determination, the logic moduleexecution unit 180 performs the action specified by action specifier 106a of logic module 102 a, or causes the action to be performed (operation356). As mentioned above, action specifier 106 a may specify an actiontype or otherwise specify an action in generic terms, in which caseoperation 356 may include: (1) identifying (e.g., based on the receivedcontext data 202) one or more acts; and (2) performing the identifiedact(s) to implement the action specified by action specifier 106 a. As aresult, performing operation 356 multiple times for the same actionspecifier 106 a may cause the logic module execution unit 180 to performdifferent acts each time, based on differences in the context data 202received each time.

If the logic module execution unit 180 does not determine that thereceived context data 202 satisfies the condition specified by conditionspecifier 104 a, then the logic module execution unit 180 does notperform the action specified by action specifier 106 a of logic module102 a (operation 358). The method 300 e of FIG. 3E is an example of“applying” a logic module to context data, as the term “applying” isused herein.

The action 184 performed in response to the determination that thecontext data 202 satisfies the condition specified by the logic module102 a may be an action that modifies a profile (e.g., a system profile,a user profile, or a device profile) or an action that modifies a logicmodule (e.g., a condition specifier or an action specifier of a logicmodule). For example, the logic module execution unit 180 may be therequester 144 in FIGS. 1F and 1G, and the action 184 may be the readrequest 142 (FIG. 1F) or the write request 152 (FIG. 1G). Similarly, thelogic module execution unit 180 may be the requester 164 in FIGS. 1H and1I, and the action 184 may be the read request 162 (FIG. 1H) or thewrite request 172 (FIG. 1I). As a result, changes in the context data202 may automatically trigger changes in profiles and in logic modules.

As described above, a profile may be associated with one or more logicmodules. A profile may be “applied” (executed) by applying (executing)some or all of the logic modules associated with the profile. Forexample, referring to FIG. 1K, a profile execution unit 190 is shown.The profile execution unit 190 may execute (apply) a profile 192 (whichmay, for example, be any of the profiles shown in FIG. 1) by performingthe method 300 f of FIG. 3F in response to receipt of a trigger input196. The trigger input 196 may be any input, such as any of the sensorinputs 214 a-j, any of the context data 202, or manual user inputprovided using any input device. For example, if the trigger input 196is time sensor input 206 a, time sensor output 208 b, or time field 212a, the profile execution unit 190 may perform method 300 f periodicallyor according to a schedule.

The method 300 f identifies the profile 192 (operation 392) in any of avariety of ways. For example, if the system 100 includes only a singleprofile, then operation 362 may select the single profile. As anotherexample, operation 362 may select a profile based on user input. Asanother example, the method 300 f may loop over a plurality of profiles(e.g., all profiles in the system 100, all profiles associated with auser, or all profiles associated with a device), and select a particularone of such profiles in operation 362.

The method 300 f enters a loop over all logic modules 194 a-c associatedwith profile 192 (operation 364). Such logic modules 194 a-c may beidentified, for example, using associations of the kind shown in FIG.1E. For each such logic module (three of which are shown in FIG. 1Ksolely for purposes of example), the method 300 f applies the logicmodule to the context data 202 in any of the manners disclosed above inconnection with FIGS. 1J and 3E (operation 366). The method 300 frepeats operation 366 for any remaining logic modules associated withthe current profile (operation 368). The method 300 f repeats operations364-368 for any remaining profiles (operation 370).

Optionally, the system 100 may include two types of logic modules:action logic modules and trigger logic modules. An action logic moduleoperates in the manner disclosed above, such as in connection with FIGS.3E and 3F. A trigger logic module, like an action logic module, mayspecify a condition and an action, but additionally define a trigger.For example, referring again to FIG. 1A, logic modules 102 a-c are shownwith optional logic module types 108 a-c, respectively. Logic moduletype 108 a indicates whether logic module 102 a is an action or triggerlogic module; logic module type 108 b indicates whether logic module 102b is an action or trigger logic module; and logic module type 108 cindicates whether logic module 102 c is an action or trigger logicmodule.

The purpose of these two logic module types may be understood byreference to their operation. Referring to FIG. 3G, a flowchart is shownof a method 300 g for applying (executing) both types of profiles in thesystem 100. The method 300 g selects a profile (operation 382) in any ofthe manners described above in connection with operation 362 of method300 f of FIG. 3F.

The method 300 g enters a loop over any and all trigger logic modulesassociated with the current profile. Such logic modules may beidentified, for example, using associations of the kind shown in FIG. 1Eand by reference to the logic module type fields 108 a-c of the logicmodules 102 a-c. In other words, the loop initiated at operation 384 isnot a loop over all logic modules associated with the current profile,but only a loop over the trigger logic modules associated with thecurrent profile. For each such trigger logic module, the method 300 gdetermines whether the condition defined by the trigger logic module issatisfied by the context data 202, in any of the manners described abovein connection with operation 354 of method 300 e of FIG. 3E (operation386). If the context data 202 satisfies the condition of the currenttrigger logic module, then the method 300 g applies all action logicmodules associated with the current profile, in any of the mannersdisclosed above in connection with FIGS. 1J and 3E (operation 388).Otherwise, the method 300 g does not apply the action logic modulesassociated with the current profile to the context data 202. The method300 g repeats the operations described above for any remaining triggerlogic modules associated with the current profile (operation 390).

As the description above makes clear, the use of trigger logic modulesmay eliminate the need to apply (execute) action logic modules that donot, or are not likely to, satisfy the context data 202. As a result,the use of trigger logic modules may enable embodiments of the presentinvention to be implemented more efficiently than embodiments whichrequire that all logic modules associated with a profile be applied tothe context data 202.

For example, as will be described in more detail below, a profile may beassociated with a trigger logic module that defines a condition that issatisfied only when a message is detected, or only when a messagetransmissible via a particular communication mode is transmitted. Thesame profile may be associated with one or more action logic modulesthat define conditions that may be satisfied by particular features ofmessages transmissible via the particular communication mode. Use of atrigger logic module eliminates the need to apply the action logicmodules in circumstances in which their conditions are not satisfied.

The various components shown in FIGS. 1A-1K and FIG. 2, and the variousmethods shown in FIGS. 3A-3G, may be implemented in various physicalsystems. For example, such components and methods may be integrated intoa single device or distributed across multiple devices in any of avariety of ways. For example, FIG. 4A shows a system 400 a in whichvarious functions disclosed herein are implemented in a single device402, such as a desktop computer, handheld computer, cell phone, or othercomputing device or communication device.

For example, referring to FIG. 4A, a diagram is shown of one example ofa system 400 a that implements various features disclosed above. Thesystem 400 a includes a device 402, which includes a single deviceprofile 404. The device 402 also includes three logic modules 404 a-cwhich are associated 406 a-c with device profile 404. The device 402includes a single logic module controller 408 for controlling the logicmodules 404 a-c, and a single logic module execution unit 410 forexecuting all of the logic modules 404 a-c. The device 402 includes aprofile controller 412 for controlling the device profile 404, and aprofile execution unit 414 for executing the device profile 404. Thedevice 402 includes context data 416 and a context controller 418 forcontrolling the context data 416.

The elements of the device 402 may operate in the manner previouslydescribed. For example, profile controller 412 may read data from andwrite data to the device profile 404 in response to requests 420, theprofile execution unit 414 may execute the device profile 404 inresponse to a trigger 422, logic module controller 408 may read datafrom and write data to logic modules 404 a-c in response to requests424, logic module execution unit 410 may execute the logic modules 404a-c based on the context data 416, and context controller 418 may readfrom and write to the context data 416 based on sensor inputs 426.

Although device 402 may receive inputs (e.g., request 420, trigger 422,request 424, and sensor inputs 426) from any source, one such source isa human user who provides one or more such inputs manually using any oneor more input devices within and/or connected to the device 402. Any ofsuch inputs may, for example, be generated in response to and based onone or more gestures by the human user, such as a single gesture (e.g.,a single mouse click, a single keypress, a single touch, or a singlespoken word). The same is true of any inputs disclosed herein inconnection with any device.

As another example, referring to FIG. 4B, a diagram is shown of oneexample of another system 400 b that implements various featuresdisclosed above. The system 400 a includes two devices 432 a and 432 b,each of which may contain the same or similar components as the device402 of FIG. 4A. Therefore, for ease of illustration, various componentsfrom FIG. 4A are not shown within the devices 432 a-b of FIG. 4B.Instead, FIG. 4B illustrates that device 432 a includes a first deviceprofile 434 a and device 432 b includes a second device profile 434 bthat differs from the first device profile 432 a. The first deviceprofile 434 a may, for example, be associated with a first set of logicmodules (not shown), while the second device profile 434 b may, forexample, be associated with a second set of logic modules (not shown)that differs from the first set of logic modules. As a result, even ifthe two devices 432 a-b are provided with the same context data 416 asinput, the two devices 432 a-b may take different actions in response tosuch context data 416 due to differences in their device profiles 434a-b. Alternatively, for example, the devices 432 a-b may containidentical device profiles, or no device profiles, but contain userprofiles that differ from each other, thereby causing the devices 432a-b to take different actions in response to the same context data 416.

As another example, referring to FIG. 4C, a diagram is shown of oneexample of a system 400 c that implements various features disclosedabove. The system 400 c includes a profile server 442, which may be anykind of computing device, and which includes a user profile 444associated with a human user (not shown). The system 400 c also includesdevices 446 a and 446 b, each of which may contain the same or similarcomponents as the device 402 of FIG. 4A. Device 446 a includes userprofile 444′, which is identical in content to user profile 444 on theserver 442. Similarly, device 446 b includes user profile 444″, which isidentical in content to user profile 444 on server 442. If amodification is made to the user profile 444 at the server 442, theserver 444 may, in response, automatically transmit signals over anetwork 448 (such as the Internet) to both device 446 a and device 446 bsufficient to cause the modification to be reflected in user profiles444′ and 444″. Similarly, if a modification is made to the user profile444′ at the device 446 a, the device 446 a may, in response,automatically transmit signals over network 448 to server sufficient tocause the modification to be reflected in user profile 444; in responseto which the server 442 may automatically transmit signals over network448 to device 446 b sufficient to cause the modification to be reflectedin user profile 444″. The system 400 c may take similar action inresponse to a modification made to user profile 444″.

Similar techniques may be applied to system profiles and device profilesthat are replicated across multiple devices. Similar techniques may alsobe applied to profiles of any kind that are distributed across multipledevices, i.e., in which a first portion of one profile is stored on andapplied by a first device and in which a second portion of the sameprofile is stored on and applied by a second device.

As these examples illustrate, a “device” profile may, but need not, bestored on the device associated with the profile. For example, thedevice profile associated with a device may be stored solely on aserver, which contains a device profile controller that controls thedevice profile and uses the output of the device profile to control thedevice accordingly. As another example, the server may contain thedevice profile, while the device may contain the device profilecontroller, which may access the device profile remotely at the server.

Various execution modules, such as the profile controller 412, profileexecution unit 414, context controller 418, logic module controller 408,and logic module execution unit 410, may also be replicated acrossmultiple devices (including, e.g., clients and/or servers) and/ordistributed across multiple devices. In particular, any particularexecution module may execute on one device but process data located onanother device. For example, in the system 400 c of FIG. 4C, the profileserver 442 may contain a user profile controller (not shown) thatcontrols both the user profile 444 and the user profiles 444′ and 444″,in which case the devices 446 a and 446 b may not include user profilecontrollers. Similarly, any particular execution module may execute onone device and provide output to another device.

One or more of the associations disclosed herein, such as theassociations 136 a-g shown in FIG. 1E, may be implemented in recordstangibly stored on one or more non-transitory computer-readable media.For example, in FIG. 4A, associations 406 a-c between device profile 404and logic modules 404 a-c may be stored on one or more computer-readablemedia within the device 402. Associations may be replicated and/ordistributed across devices. Associations between two components may beimplemented by storing one element within the other. For example, anassociation between a logic module and a profile may be implemented bystoring the logic module (or a copy thereof) within the profile.

Any profile or logic module may have an activation state. An activationstate has is a parameter that has two permissible value: active andinactive. For ease of explanation, an activation state whose value isactive is referred to herein as an active activation state, while anactivation state who value is inactive is referred to herein as aninactive activation state. Similarly, a component (profile or logicmodule) whose activation state is active is referred to herein as anactive component, while a component whose activation state is inactiveis referred to herein as an inactive component. If a component isactive, then the component's controller applies (executes) the componentin any of the ways disclosed herein. If a component is inactive, thenthe component's controller may either not apply (execute) the component,or may apply the component but not generate any output from thecomponent. For example, if a logic module is inactive, then the logicmodule's controller may either not execute the logic module even if thecontext data satisfies the logic module's condition, or the logicmodule's controller may execute the logic module but not perform theaction specified by the logic module even if the context data satisfiesthe logic module's condition.

An activation state may, for example, be implemented as a special kindof logic module condition that takes precedence over any otherconditions specified by the logic module. In other words, the logicmodule's execution unit may, as part of determining whether the contextdata satisfies the logic module's conditions, treat the logic module'sactivation state as if it were part of the context data and determinewhether the logic module's activation state is active before determiningwhether any of the logic module's other conditions (if any) aresatisfied by the context data. As a result, if the logic module'sactivation state is inactive, the logic module's execution unit will notattempt to determine whether any of the logic module's other conditionsare satisfied by the context data, even if one or more other conditionsare satisfied by the context data.

The values of the activation states of distinct components may differfrom each other. As with any other data disclosed herein, the activationstate of a component may be tangibly stored in a non-transitorycomputer-readable medium, whether within the component itself orelsewhere. A component's controller may be used to read the value of acomponent's activation state and to write a value to (e.g., modify thevalue of) the component's activation state in any of the ways disclosedherein. For example, a component's controller may change a component'sactivation state from active to inactive or from inactive to active inresponse to manual user input, such as manual user input specifying thedesired activation state value, or manual user input indicating that theactivation state value should be toggled.

If multiple profiles are associated with a system, device, or user, anyone or more of such profiles may be active simultaneously. It may beuseful, however, for only one profile associated with a system, device,or user to be active at any particular time. In such a case, the profilethat is active is referred to herein as “the active profile” or “thecurrent profile” in connection with the system, device, or user.Embodiments of the present invention may enforce such a scheme bydetermining that a particular profile associated with a system, device,or user has become active and, in response to the determination,deactivating all of the other profiles associated with the system,device, or user. As described below, a profile associated with a system,device, or user may become the active profile in response to any of avariety of inputs, such as manual user input selecting the profile asthe active profile.

Certain embodiments of the present invention may be used in connectionwith the transmission of messages. For example, the conditions specifiedby logic modules may be satisfied by the detection of messages, byparticular message content, or by the identities of message sendersand/or recipients. As another example, the actions specified by logicmodules may be actions performed on messages, such as blocking,allowing, forwarding, or deferring messages.

For example, FIG. 5A shows an embodiment of a system 500 a which mayinclude any of the elements disclosed above (e.g., in FIGS. 1A-1K andFIG. 2), but which only shows elements of interest for ease ofillustration. The system 500 a includes a first logic module 502 a and asecond logic module 502 b. The first logic module 502 a includes one ormore condition specifiers 504 a and an action specifier 510 a. Morespecifically, the first logic module 502 a includes a firstcommunication mode condition specifier 506 a that specifies a conditionthat is satisfied by messages transmissible via a first communicationmode, and the second logic module 502 b includes a second communicationmode condition specifier 506 b that specifies a condition that issatisfied by messages transmissible via a second communication mode thatdiffers from the first communication mode.

The first logic module 504 a may, but need not, include one or moreadditional condition specifiers 508 a that may specify any of theconditions disclosed herein. Similarly, the second logic module 504 bmay, but need not, include one or more additional condition specifiers508 b that may specify any of the conditions disclosed herein. Althougheither or both of the additional conditions 508 a-b in FIG. 5A mayinclude an activation state, FIG. 5B explicitly shows an example of asystem 500 b in which logic modules 502 a-b contain activation states512 a-b.

The system 500 a may, but need not, also include any number ofadditional similar logic modules, such as a third logic module 502 cthat includes one or more condition specifiers 504 c and a third actionspecifier 510 c. The third condition specifiers 504 c may include athird communication mode condition specifier 506 c that specifies acondition that is satisfied by messages transmissible via a thirdcommunication mode that differs from both the first communication modeand the second communication mode. The third logic module 504 c may, butneed not, include one or more additional condition specifiers 508 c thatmay specify any of the conditions disclosed herein (including anactivation state, such as the activation state 512 c shown in FIG. 5C).

Each of the first, second, and third action specifiers 510 a-c mayspecify any action. The action specified by the first action specifier510 b may differ from the action specified by the second actionspecifier 510 b and from the action specified by the third actionspecifier 510 c. For example, no two of the actions specified by actionspecifiers 510 a-c may be the same as each other.

FIG. 5C shows an example of a system 500 c in which a device profile 520associated with logic modules 502 a-c includes an activation state 522,but in which the logic modules 502 a-c do not include activation states.As a result, when the device profile 520 is active, applying the deviceprofile 520 necessarily includes applying the logic modules 502 a-c;when the device profile 520 is inactive, applying the device profile 520does not include applying the logic modules 502 a-c.

FIG. 5D shows an example of a system 500 d in which a device profile 520associated with logic modules 502 a-c includes an activation state 522(as in FIG. 5C), and in which the logic modules 502 a-c includeactivation states 512 a-c (as in FIG. 5B). As a result, when the deviceprofile 520 is active, applying the device profile 520 includes applyingonly the active logic module(s) (if any) among logic modules 502 a-c;when the device profile 520 is inactive, applying the device profile 520does not include applying any of the logic modules 502 a-c, even activelogic modules. In other words, in the embodiment of FIG. 5D, theactivation state 522 of device profile 520 overrides the activationstates 512 a-c of logic modules 502 a-c.

Communications modes and examples thereof will be described in moredetail below. Examples, however, of first and second communicationmodes, or of first, second, and third communication modes that may bespecified by the communication mode condition specifiers disclosed abovein connection with FIG. 5A are: (1) email and voice calls; (2) email andtext messages; (3) voice calls and text messages; and (4) email, textmessages, and voice calls.

The system 500 a of FIG. 5A may, for example, be used to enable controlof messages transmissible via multiple distinct communication modes. Forexample, as shown in FIGS. 5C and 5D, device profile 520 may beassociated with two or more of the logic modules 502 a-c. The techniquesdisclosed herein may then be used to apply the associated logic modulesto messages transmissible via the device associated with the deviceprofile, and thereby to control messages transmissible via multiplecommunication modes in accordance with the logic modules associated withthe device profile. The same techniques may be applied if a systemprofile or a user profile, rather than a device profile, is associatedwith two or more of the logic modules 502 a-c.

For example, FIG. 6A shows a flowchart of a method 600 that may beperformed by the system 500 a of FIG. 5A. The system 500 a may detect afirst message transmissible via the first communication mode (operation602), in response to which the system 500 a may perform the first action(operation 604). The system 500 a may, for example, receive the firstmessage, determine whether the first message is transmissible via thefirst communication mode, and perform operation 604 only if the firstmessage is determined to be transmissible via the first communicationmode. The system 500 a may detect a second message transmissible via thesecond communication mode (operation 606), in response to which thesystem 500 b may perform the second action (operation 608).

FIG. 6B shows a flowchart of a method 610 that may be performed by thesystem 500 b of FIG. 5B. In the case of FIG. 5B, the system 500 b maydetect a first message transmissible via the first communication mode(operation 612). The system 500 b may determine whether the first logicmodule 502 a is active (operation 614). If the first logic module 502 ais active, the system 500 b may (in response to the determination)perform the first action (operation 616); otherwise, the system 500 bmay not perform the first action, even if the first message satisfiesall of the conditions 504 a of the first logic module 502 a. The system500 b may detect a second message transmissible via the secondcommunication mode (operation 618). The system 500 b may determinewhether the second logic module 502 b is active (operation 620). If thesecond logic module 502 b is active, the system 500 b may (in responseto the determination) perform the second action (operation 622);otherwise, the system 500 b may not perform the second action, even ifthe second message satisfies all of the conditions 504 b of the secondlogic module 502 a.

FIG. 6C shows a flowchart of a method 630 that may be performed by thesystem 500 c of FIG. 5C. The system 500 c may detect a first messagetransmissible via the first communication mode (operation 632). Thesystem 500 b may determine whether the device profile 520 is active(operation 634). If the device profile 520 is active, the system 500 cmay (in response to the determination) perform operation 604 asdescribed above; otherwise, the system 500 c may not perform operation604, even if the first message satisfies all of the conditions 504 a ofthe first logic module 502 a. The system 500 c may detect a secondmessage transmissible via the second communication mode (operation 636).The system 500 c may determine whether the device profile 520 is active(operation 638). If the device profile 520 is active, the system 500 cmay (in response to the determination) perform operation 608 asdescribed above; otherwise, the system 500 c may not perform operation608, even if the second message satisfies all of the conditions 504 b ofthe second logic module 502 a.

The method 630 of FIG. 6C need not make multiple determinations whetherthe device profile 520 is active (e.g., operations 634 and 638).Instead, for example, operations 634 and 638 may be removed from method630 and replaced with a single operation that is the same as operation634 or 638, but which is performed before operation 632, so thatoperations 602-608 are not performed if the device profile 520 isdetermined to be inactive, even if the system 500 c receives a messagetransmissible via the first communication mode or a messagetransmissible via the second communication mode. Similar techniques maybe applied to any system disclosed herein, to any kind of profile, andto logic modules having activation states.

As yet another example, if device profile 520 is inactive, then thesystem 500 c may not make any determination whether the device profile520 is active while the device profile 520 is inactive, even if thesystem 500 c receives a message transmissible via the firstcommunication mode or a message transmissible via the secondcommunication mode. An inactive device profile, in other words, mayeffectively be disabled so that the system 500 c does not apply thedevice profile (e.g., determine whether the device profile's conditionsare satisfied) while the device profile is inactive. Similar techniquesmay be applied to any system disclosed herein, to any kind of profile,and to logic modules having activation states.

FIG. 6D shows a flowchart of a method 650 that may be performed by thesystem 500 d of FIG. 5D. The system 500 d may detect a first messagetransmissible via the first communication mode (operation 652). Thesystem 500 d may determine whether the device profile 520 is active(operation 654). If the device profile 520 is active, the system 500 dproceed to operation 614 of FIG. 6B and perform the remainder of themethod 610 of FIG. 6B (operation 656). Otherwise, the system 500 d maynot perform operation 656 and may not otherwise apply the device profile520.

Changing activation states in the systems 500 b-d of FIGS. 5B-5D maycause the systems 500 b-d to change their handling of messages and othercontext. For example, consider the system 500 c of FIG. 5C. If thedevice profile 520 is active at a first time, then the system 500 c may,in response to receiving messages of the first and second communicationmodes, perform operations 602-604 and 606-608, as described above inconnection with FIG. 6C. Then, if the activation state 522 of the deviceprofile 520 is changed to inactive and the system 500 c receivesmessages of the first and second communication modes, the system 500 cmay not perform operations 602-604 or 606-608, as described above inconnection with FIG. 6C. The activation state 522 of the device profile520 may, as described above, be changed in response to user input. As aresult, a user may control whether the device profile 520 is active atany particular time and thereby control the manner in which the system500 c processes detected messages of various communication modes.

Condition specifiers, such as condition specifiers 508 a-c in FIG. 5,may, for example, specify conditions that are satisfied by context dataindicating that:

-   -   the current time is: a particular time of day, within a        particular time period (e.g., 9:00 AM-5:00 PM) on any day,        within a particular time period that satisfies an additional        condition (e.g., 9:00 AM-5:00 PM on a weekday), within a        particular day of the week, a particular day of any month (e.g.,        1^(st) or 15^(th)), on a holiday, within a user-specified time        period (e.g., a birthday or anniversary), or within a time        period delimited by a timer initiated at a previous time and        having either a specified duration or a specified end time;    -   the current user: is a particular user (e.g., having a        particular real name, user name, or other unique identifier        contained within a list or satisfying other conditions), has        particular privileges or access rights, or has provided        credentials satisfying predetermined criteria;    -   the current device: is a particular device (e.g., having a        particular serial number or unique identifier), is owned by or        otherwise associated with a particular user or class of user,        has or lacks particular communication capabilities (e.g., the        ability to transmit messages via a particular communication        mode), has or lacks hands-free capability (e.g., voice control),        has or lacks a particular kind of output device (e.g., a touch        screen or a text-to-speech reader), or has or lacks a particular        kind of input device (e.g., a microphone or touchscreen);    -   any application executing on the current device or associated        with the current user: is receiving input from a user (e.g.,        keyboard input or voice input), is providing output of any kind        to a user, is providing message-related output to a user (e.g.,        manifesting a message or a notification of a message), is        manifesting visual output, is manifesting auditory output, is        transmitting a message, or includes means for transmitting        messages (e.g., messages transmissible via one or more        predetermined communication modes);    -   a message: is being composed by the current user; is being        manifested to the current user; is being transmitted to or from        the current user or any device associated with the current user;        contains data (e.g., a body) satisfying predetermined criteria;        contains meta-data (e.g., subject, headers) satisfying        predetermined criteria; has a sender or recipient satisfying        predetermined criteria; has a priority satisfying predetermined        criteria; or has a time (e.g., time sent or time received)        satisfying predetermined criteria;    -   a current or scheduled location of a device: is a particular        location, is within a particular geographic area, is a        particular category of location (e.g., home, work, classroom,        restaurant, lecture hall, theater, vehicle, hospital), is an        exterior location, is an interior location;    -   a first device is in proximity to (e.g., within no more than        some predetermined maximum distance of) a second device, such as        any other device, or another device associated with a user        satisfying predetermined criteria (such as a user who is a        friend, family member, colleague, or within the same online        social network as the user associated with the first device);    -   a device is moving at a speed that is greater than or less than        a predetermined maximum or minimum speed, respectively;    -   a device's acceleration is greater than or less than a        predetermined maximum or minimum speed, respectively;    -   a current activity of a user: is a communicative activity (e.g.,        composing, sending, receiving, viewing, or reading a message),        is a particular category of activity (e.g., home, work, leisure,        study), includes providing any input to a device, or includes        providing input to a device using a particular kind of input        device (e.g., microphone, keyboard, or touchscreen);    -   a calendar indicates that: the current time is within an        appointment on the calendar, an appointment on the calendar is        scheduled to begin no more than some predetermined amount of        time later than the current time (e.g., 1 minute, 5 minutes, 30        minutes, 1 hour, 4 hours, or 1 day), an appointment on the        calendar was scheduled to begin no more than some predetermined        amount of time earlier than the current time (e.g., 1 minute, 5        minutes, 30 minutes, 1 hour, 4 hours, or 1 day), or an        appointment on the calendar was scheduled to end no more than        some predetermined amount of time earlier than the current time        (e.g., 1 minute, 5 minutes, 30 minutes, 1 hour, 4 hours, or 1        day);    -   user input indicates that: an activation state of a component        (e.g., profile or logic module) should be changed, a timer        should be started or stopped, a timer should have a specified        duration,

The items on the list above correspond to the context sensors 206 a-i,but omit the user input sensor 206 j because user input may contributeto or override any condition. For example, input received from a usermay override the time sensor 206 a by manually specifying a time otherthan the current time, in which case the context controller 204 maytreat the time specified by the user as the current time instead of thetime otherwise sensed by the time sensor 206 a. As another example, theuser may manually specify a location other than the user's actualcurrent location, in which case the context controller 204 may treat thelocation specified by the user as the current location instead of thelocation otherwise sensed by the location sensor 206 f.

As described above, any aspect of context data 202 may satisfy thecondition specified by a logic module. In the particular example of FIG.5, each logic module specifies at least one condition that is satisfiedby a message transmissible via a particular communication mode. Amessage that satisfies such a condition is referred to below as a“triggering message.” Action specifiers, such as action specifiers 510a-c in FIG. 5, may, for example, specify actions such as the following:

-   -   Block. Blocking a message may include any one or more of the        following: preventing the message from being sent, placed in an        output queue to be sent, provided to a software component        adapted to send messages, created, edited, manifested, received,        or downloaded. Blocking a message may include any one or more of        the following: preventing a notification of the message from        being generated, transmitted, or manifested.    -   Allow. Allowing a message may include, for example, not taking        any action in connection with the message. As a result,        associating an “allow” action type with a particular        communication mode may have the same effect as deactivating the        logic module whose condition is satisfied by messages        transmissible via the communication mode, and may be implemented        using the same techniques as deactivating the logic module whose        condition is satisfied by messages transmissible via the        communication mode. The effect of applying an “allow” action to        a particular message may be that the message is acted upon        (e.g., by a system external to the message control system 100)        in a manner that is the same as or equivalent to the manner in        which the message would have been acted upon if the message        control system 100 were not present.    -   Forward. Forwarding a message may, for example, include        transmitting the message to a new destination (e.g., user or        device) that differs from the original destination of the        message. The new destination may, for example, be explicitly        specified by the action specifier, or be derived from a rule        (e.g., “forward messages addressed to a recipient to that        recipient's administrative assistant”). Optionally, forwarding a        message may also include blocking the message. For example,        forwarding an email message originally transmitted to a first        user may include blocking the email message from being received        by the first user and transmitting the email message to a second        user.    -   Defer. Deferring a message may, for example, include blocking        the message until a timer elapses or until a predetermined        criterion is satisfied (e.g., until a predetermined time occurs)        and then allowing the message. Deferral, therefore, is        equivalent to and may be implemented using the same techniques        as blocking followed by allowing. The deferral period may, for        example, be explicitly specified by the action specifier or be        derived by a process from the current context (e.g., “on        weekdays, defer personal messages until 5 pm”).    -   Change mode. Changing the mode of a message may, for example,        include transmitting a message using a new mode that differs        from the original mode by which the message was transmitted. For        example, a message that was received at an email server using an        email protocol may be transmitted to the recipient user or        device using a text messaging protocol, either instead of or in        addition to transmitting the message to the recipient user or        device using an email messaging protocol. As this example        illustrates, changing the mode of a message may include blocking        the message. Changing the mode of a message may be implemented        using the same techniques as forwarding a message but with the        mode of the message changed.    -   Change contents. Changing the contents of a message may, for        example, include modifying the contents of the message to        produce a modified message and transmitting the modified        message, either instead of or in addition to the original        message. For example, an error message containing a numerical        error code may be modified to include an English-language        description that is easier for the recipient user to understand.        Changing the contents of a message may be implemented using        similar techniques to changing the mode of a message.    -   Respond. Responding to an original message may include sending a        response message to the original message, either via the same or        different communication mode from the original message.        Optionally, responding to an original message may include        blocking or deferring the original message. The contents of the        response may, for example, be specified explicitly by the action        specifier, or be derived by a process from the current context        (e.g., “I am in a scheduled meeting until 4:00 pm and cannot        respond to your email message until at least 4:15 pm”).

Any of the types of actions listed above may, for example, include: (1)performing the action on a particular triggering message in response todetection of the triggering message; or (2) initiating performance ofthe action on current and future messages (e.g., messages transmissiblevia the same communication mode as the triggering message, ortransmissible via communication modes that differ from the communicationmode of the triggering messages) until a future time (e.g., until theelapse of a timer, until a predetermined time occurs, or until someother condition is satisfied).

Although some of the examples of actions described herein are actionsthat are applied to messages, this is not a limitation of the presentinvention. An action may be applied to an object other than a message.Examples of actions include, but are not limited to:

-   -   launching, logging into, exiting, or logging out of one or more        applications, web sites, or accounts;    -   opening or closing files;    -   opening, displaying, closing, hiding, enabling, disabling,        changing the display order of (e.g., bringing to the front or        sending to the back), or changing the opacity, transparency,        color, or emphasis of any one or more GUI elements (e.g.,        windows, menus, dialog boxes, taskbars, or buttons);    -   changing the state of a device, such as by turning on, shutting        off, or changing the volume, brightness, contrast, or volume of        a device;    -   enabling or disabling input devices (such as keyboards, mice,        touchpads, touchscreens, microphones, or network adapters) or        output devices (such as monitors, screens, speakers, printers,        or network adapters).

An action specifier (such as any of the action specifiers 510 a-c) mayspecify not only an action to perform but also the object of the action(i.e., the object to which the action is to be applied). The actionspecifier may, for example, include an object specifier (not shown) thatspecifies the object of the action. The object specifier may specify theobject(s) of the action using a “condition” as that term is used herein,in which case the object(s) of the action may be selected as theobject(s) that satisfy the condition.

If an action specifier does not specify an object of the action, thenthe object of the action may be identified in other ways, such as byidentifying a default object or an object specified by another actionspecifier. For example, in various embodiments disclosed herein, theobject of an action may be identified as the message that satisfied thecondition that triggered the action and/or messages transmissible viathe same communication mode as the triggering message.

Certain actions may be particularly useful to perform in connection withparticular communication modes, such as:

-   -   Voice calls. For incoming calls: turning off the telephone        ringer, changing (e.g., lowering) the ringer volume, changing        the ring type (e.g., to vibrate or alarm), changing the ring        tone (e.g., from a musical tone to a beeping or ringing tone),        forwarding incoming calls directly to voicemail so that the        telephone does not ring, putting the caller on hold, and        disabling manifestation of notification of incoming voice calls.        For outgoing calls: preventing the user from initiating outgoing        calls (e.g., by disabling the dial pad, touchscreen, and/or        other input means on the telephone) and queuing outgoing calls        so that the user's speech is recorded and queued to be sent but        deferred until outgoing voice calls are activated, at which        point the outgoing call is automatically made and the user's        recorded speech is transmitted on the call.    -   Email messages. For incoming email messages: preventing        downloading of incoming email messages (or headers or other        indications of incoming email messages) from an email server to        an email client (optionally even if the user provides a manual        instruction to download email, and optionally even if the email        client is otherwise scheduled to download incoming email),        allowing downloading of incoming email messages from the email        server but preventing storing of the email messages in the        recipient's email inbox, allowing downloading of incoming email        messages from the email server and storing them in a folder        within the recipient's email inbox, allowing incoming email        messages to be added to the recipient's email inbox but        preventing manifestation of a notification of such messages,        preventing the user's inbox (or the bodies of messages contained        in the inbox) from being manifested, preventing the user from        issuing a command to receive email (such as by disabling a        “send/receive” button), and exiting from (i.e., terminating) one        or more email clients. For outgoing email, preventing new email        messages from being created, edited, sent, and/or queued to be        sent; in response to queuing of an outgoing email message to be        sent, deferring sending of the email message (e.g., until        blocking of sending email is deactivated); and exiting from        (e.g., terminating) one or more email clients.

The ability of modern computing and communication devices to multitask(i.e., to engage in multiple tasks simultaneously or apparentlysimultaneously) can be beneficial, but can also reduce the efficiency ofthe devices' users at achieving desired results. To address thisproblem, certain embodiments of the present invention enforce unitasking(the performance of only one task at a time) on devices that otherwiseare capable of multitasking.

For example, referring to FIG. 7, a diagram is shown of a system 700including a plurality of devices 702 a-c. Such devices 702 a-c mayinclude any of the components disclosed herein, but are only illustratedto contain certain components for ease of illustration. In particular,device 702 a includes a communication mode module 704 a which is capableof transmitting messages via a first communication mode, a communicationmode module 706 a which is capable of transmitting messages via a secondcommunication mode, and a communication mode module 708 a which iscapable of transmitting messages via a third communication mode. No twoof the first, second, and third communication modes are the same as eachother.

Device 702 b includes a communication mode module 704 b which is capableof transmitting messages via the first communication mode and acommunication mode module 706 b which is capable of transmittingmessages via the second communication mode. Device 702 c includes acommunication mode module 708 c which is capable of transmittingmessages with the third communication mode. The first, second, and thirdcommunication modes may, for example, be email, text messaging, andvoice call communication modes.

The particular number and combination of devices, communication modes,and communication mode modules shown in FIG. 7 is merely an example andnot a limitation of the present invention. For example, the system 700may include fewer or greater than three communication devices (e.g., oneor two communication devices). Furthermore, the number of communicationmodes represented by the communication mode modules in the system 700 cmay be any number greater than or equal to two. The particulardistribution of communication mode modules among the devices 702 a-c isalso merely an example.

Each of communication mode modules 704 a-b, 706 a-b, 708 a, and 708 cmay, for example, be hardware, a computer program, or any combinationthereof. For example, an email communication mode module may include anycombination of one or more of the following: email client software, oneor more input devices for receiving email input (e.g., keyboard ortouchscreen), one or more output devices for providing email output(e.g., monitor, touchscreen, or speakers), and one or more networkcommunication devices (e.g., wired or wireless network card).

Multiple communication mode modules within a single device may becapable of executing in parallel with each other or substantially inparallel with each other (e.g., by utilizing multi-tasking capabilitiesof the device). For example, communication mode modules 704 a, 706 a,and 708 a may be capable of executing in parallel with each other ondevice 702 a, so that they can perform their communication mode-relatedfunctions in parallel with each other.

The system 700 also includes a system profile 710 that is associatedwith all of the devices 702 a-c. The system profile 710 includes atleast two logic modules; three such logic modules 712 a-c are shown inFIG. 7 for purposes of example. Although the logic modules 712 a-c mayspecify any conditions and any actions, a particular set of conditionsand actions will now be described that may be used to enforcecommunication mode unitasking on and/or across the devices 702 a-c. Theterm “communication mode unitasking” refers herein to engaging in (e.g.,composing, reading, or transmitting) communication of messagestransmissible via only one communication mode at any particular time.For example, the system 700 c may prevent users of the system 700 cfrom: (1) engaging in text messaging or voice call communication whileengaged in email communication; (2) engaging in email communication ortext messaging communication while engaged in voice call communication;and (3) engaging in voice call communication or email communicationwhile engaged in text messaging communication. The system 700 may allowthe user to switch from unitasking in connection with a firstcommunication mode to unitasking in connection with a secondcommunication mode; this is referred to here as “sequentialcommunication mode unitasking.”

Communication mode unitasking may, for example, be implemented byconfiguring any two or more of logic modules 712 a-c as follows: (1) theconditions 714 a of logic module 712 a are satisfied by detection of anemail message; (2) the action 716 a of logic module 712 a blocks textmessages and voice calls; (3) the conditions 714 b of logic module 712 bare satisfied by detection of a voice call; (4) the action 716 b oflogic module 712 b blocks email messages and text messages; (5) theconditions 714 c of logic module 712 c are satisfied by the detection ofa text message; and (6) the action 716 c of logic module 712 c blocksemail messages and voice calls.

An effect of implementing the system 700 is illustrated by the method800 of FIG. 8, which may be performed by the system 700 by applying thetechniques disclosed herein. The method 800 determines whether any ofthe devices 702 a-c associated with the system profile 710 is engaged inemail communication (operation 802), such as by analyzing the contextdata 202 to detect whether any of the devices 702 a-c is composing,manifesting, or transmitting an email message. If any of the devices 702a-c is engaged in email communication, then the method 800 blocks textmessage communication and voice call communication on all of the devices702 a-c (operation 804).

The method 800 determines whether any of the devices 702 a-c associatedwith the system profile 710 is engaged in voice communication (operation806). If any of the devices 702 a-c is engaged in voice communication,then the method 800 blocks email communication and text messagecommunication on all of the devices 702 a-c (operation 808). Finally,the method 800 determines whether any of the devices 702 a-c associatedwith the system profile 710 is engaged in text message communication(operation 810). If any of the devices 702 a-c is engaged in textmessage communication, then the method 800 blocks email communicationand voice call communication on all of the devices 702 a-c (operation812).

The system 700 may block messages transmissible via a particularcommunication mode by, for example, performing any one or more of thefollowing in connection with the communication mode module(s) in thesystem 700 that are capable of transmitting messages via the particularcommunication mode (the “blocked communication mode modules”): (1)disabling or shutting down the blocked communication mode modules; (2)intercepting incoming messages addressed to the blocked communicationmode modules and preventing the intercepted messages from being providedto the blocked communication mode modules; (3) intercepting outgoingmessages attempted to be sent by the blocked communication mode modulesand preventing the intercepted messages from being provided to theirintended destinations; (4) preventing the blocked communication modemodules from being used to compose messages of the correspondingcommunication mode; and (5) preventing the blocked communication modemodules from manifesting messages of the corresponding communicationmode.

The blocking of a communication mode performed by FIG. 7 in method 800may, but need not, include blocking of all messages transmissible viathe communication mode, or blocking of all activities performed inconnection with messages transmissible via the communication mode. Forexample, such blocking may include only blocking of incoming messages,only blocking of outgoing messages, only blocking of composing ofmessages, or only blocking of manifesting messages.

The blocking of a communication mode performed by FIG. 7 in method 800may continue until manually discontinued in response to user input, oruntil the context data 202 satisfies some predetermined condition (suchas the lapse of a timer). For example, a user of the devices 702 a-c mayengage in communication of a first communication mode (e.g., email) andthereby cause the system 700 to block communications of the remainingcommunication modes (e.g., text message and voice calls). The system 700may block incoming communications of the blocked communication modesunless and until the user of the devices 702 a-c engages in activityrelated to one of the blocked communication modes, such as composing amessage transmissible by one of the blocked communication modes orviewing an inbox of messages transmissible by one of the blockedcommunication modes. The system 700 may detect such activity by the userand treat it as an input to method 800, i.e., as an indication that theuser now wants to unitask in the newly-engaged communication mode. Inresponse, the system 700 may allow messages transmissible via the newcommunication mode but block messages transmissible via the remainingcommunication modes. In this way, the user may engage in sequentialunitasking with a minimum of effort.

As another example, the system 700 may not allow the user to manuallydiscontinue unitasking in connection with a particular communicationmode. Instead, the system 700 may be configured only to discontinueunitasking entirely, or to discontinue unitasking in connection with onecommunication mode and initiate unitasking in connection with anothercommunication mode, in response to satisfaction of a predeterminedcondition by the context data 202, where the predetermined condition isnot based on user input (or at least that the predetermined condition isnot based on user input provided by the user at or around the time atwhich the system 700 determines whether the predetermined condition issatisfied). In such an embodiment, the system 700 may or may not allowthe user to effectively discontinue unitasking by changing theactivation state of the system profile 710 and/or of other profiles inthe system 700.

As another example, the actions defined by logic modules 712 a-c may be“change mode” rather than block. As a result, in response to detectingthat the user is engaged in email communication, the system 700 mayperform a “change mode to email” action in connection with any messagestransmissible via other communication modes (e.g., text messaging andvoice calls) that the system 700 detects while the system 700 isunitasking in connection with email. Any incoming text messages receivedduring this time may, therefore, be converted into email messages anddelivered to the user's email inbox, and any incoming voice callsreceived during this time may, therefore be converted (using anautomated speech recognition engine) into email messages and deliveredto the user's email inbox (possibly in addition to storing a recordingof the voice call as a voicemail message in the user's voicemail inbox).Similarly, in response to detecting that the user is engaged in livevoice call communication, the system 700 may perform a “change mode tovoice call” action in connection with any messages transmissible viaother communication modes (e.g., text messaging and email) that thesystem 700 detects while the system 700 is unitasking in connection withlive voice calls. Any incoming text messages or email messages receivedduring this time may, therefore, be converted (using a text-to-speechengine) into live voice calls and/or voicemail messages that aredelivered to the user. Similar techniques may be applied when the useris unitasking in connection with text messages.

Communication mode unitasking is merely one example of “enforcedunitasking,” as that term is used herein. Embodiments of the presentinvention may engage in enforced unitasking by limiting a system (e.g.,a computing device or software) to performing only a subset of the setof tasks that the system inherently is capable of performing. The subsetmay include one, two, three, or any number of tasks fewer than the totalnumber of tasks that the system inherently is capable of performing.

For example, referring to FIG. 7B, a diagram is shown of a system 720including a plurality of computing devices 722 a-c. Such devices 722 a-cmay include any of the components disclosed herein, but are onlyillustrated to contain certain components for ease of illustration. Inparticular, device 722 a includes a first task module 724 a which iscapable of performing a first task, a second task module 726 a which iscapable of performing a second task, and a third task module 728 a whichis capable of performing a third task. No two of the first, second, andthird tasks are the same as each other.

Device 722 b includes a first task mode module 724 b which is capable ofperforming the first task and a second task mode module 726 b which iscapable of performing the second task. Device 722 c includes a thirdtask module 728 c which is capable of performing the third task.

The particular number and combination of devices and task modules shownin FIG. 7B is merely an example and not a limitation of the presentinvention. For example, the system 720 may include fewer or greater thanthree computing devices (e.g., one or two computing devices).Furthermore, the number of tasks represented by the task modules in thesystem 700 may be any number greater than or equal to two. Theparticular distribution of task modules among the devices 722 a-c isalso merely an example.

Each of task modules 724 a-b, 726 a-b, 728 a, and 728 c may, forexample, contain or otherwise be associated with one or more hardwarecomponents, one or more computer programs, or any combination thereof.In other words, a particular task module may contain or otherwise beassociated with any combination of hardware and/or software componentsfor performing the particular task associated with the task module. Acomponent of a task module need not be a standalone product. Rather, forexample, a component of a task module may be a component or subset of aproduct. For example, if task module 724 a is associated with the taskof transmitting email messages, then task module 724 a may include: (1)a computer program for transmitting email; and (2) an email clientcomponent of a web browser. Although task modules 724 a, 724 b, and 724c are associated with distinct tasks, the contents of task modules 724a, 724 b, and 724 c may overlap with each other. For example, if taskmodule 724 a is associated with the task of transmitting email messagesand task module 724 b is associated with the task of creatingappointments on a calendar, then task modules 724 a and 724 b maycontain (or otherwise be associated with) a computer program thatincludes both means for transmitting email messages and means forcreating calendar appointments.

Multiple task modules within a single device may be capable of executingin parallel with each other or substantially in parallel with each other(e.g., by utilizing multi-tasking capabilities of the device). Forexample, task modules 724 a, 726 a, and 728 a may be capable ofexecuting in parallel with each other on device 722 a, so that they canperform their respective tasks in parallel with each other.

The term “task,” as that term is used herein, may refer, for example, toany one or more of the following:

-   -   transmitting or attempting to transmit any message (e.g.,        sending a message and/or receiving a message), or transmitting        or attempting to transmit a message that satisfies a particular        condition;    -   manifesting or attempting to manifest a message or a        notification of a message;    -   creating a new message or attempting to create a new message;    -   editing an existing message or attempting to edit an existing        message;    -   using a particular device for any purpose, or using a device to        perform a task that satisfies a particular condition;    -   using a particular component (e.g., a particular input component        or a particular output component) of a device for any purpose,        or using a component of a device to perform a task that        satisfies a particular condition;    -   using a particular application for any purpose, or using a        particular application to perform a task that satisfies a        particular condition;    -   using a particular user interface element for any purpose, or        using a particular user interface element to perform a task that        satisfies a particular condition.

The system 720 also includes a system profile 730 that is associatedwith all of the devices 722 a-c. The system profile 730 includes atleast two logic modules; three such logic modules 732 a-c are shown inFIG. 7B for purposes of example. Although the logic modules 732 a-c mayspecify any conditions and any actions, a particular set of conditionsand actions will now be described that may be used to enforce unitaskingon and/or across the devices 722 a-c. In particular, the system 720 mayprevent users of the system 720 from: (1) performing the second andthird tasks (i.e., the tasks associated with task modules 726 a and 728b, respectively) while performing the first task (i.e., the taskassociated with task module 704 a); (2) performing the first and thirdtasks (i.e., the tasks associated with task modules 704 a and 708 a,respectively) while performing the second task (i.e., the taskassociated with task module 706 a); and (3) performing the first andsecond tasks (i.e., the tasks associated with task modules 704 a and 706a, respectively) while performing the third task (i.e., the taskassociated with task module 708 a). The system 720 may allow the user toswitch from unitasking in connection with one task to unitasking inconnection with another task; this is referred to here as “sequentialenforced unitasking.”

Sequential enforced unitasking may, for example, be implemented byconfiguring any two or more of logic modules 732 a-c as follows: (1) thecondition 734 a of logic module 732 a is satisfied by detecting that anyof the devices 722 a-c is performing the first task; (2) the action 736a of logic module 732 a prevents devices 702 a-c from performing eitheror both of the second and third tasks (such as by disabling and/orreconfiguring task modules 706 a, 708 a, 706 b, and 708 c); (3) thecondition 734 b of logic module 732 b is satisfied by detecting that anyof the devices 722 a-c is performing the second task; (4) the action 736b of logic module 732 b prevents devices 702 a-c from performing eitheror both of the first and third tasks (such as by disabling and/orreconfiguring task modules 704 a, 708 a, 704 b, and 708 c); (5) thecondition 734 c of logic module 732 c is satisfied by detecting that anyof the devices 722 a-c is performing the third task; and (6) the action736 c of logic module 732 c prevents devices 702 a-c from performingeither or both of the first and second tasks (such as by disablingand/or reconfiguring task modules 704 a, 706 a, 704 b, and 706 b).

An effect of implementing the system 720 is illustrated by the method820 of FIG. 8B, which may be performed by the system 720 by applying thetechniques disclosed herein. The method 820 determines whether any ofthe devices 722 a-c associated with the system profile 730 is performingthe first task (operation 822), such as by analyzing the context data202 to detect whether any of the devices 722 a-c is performing the firsttask. If any of the devices 722 a-c is performing the first task, thenthe method 820 prevents the devices 722 a-c from performing the secondor third tasks (operation 824).

The method 820 determines whether any of the devices 722 a-c associatedwith the system profile 730 is performing the second task (operation826), such as by analyzing the context data 202 to detect whether any ofthe devices 722 a-c is performing the second task. If any of the devices722 a-c is performing the second task, then the method 820 prevents thedevices 722 a-c from performing the first or third tasks (operation828).

The method 820 determines whether any of the devices 722 a-c associatedwith the system profile 730 is performing the third task (operation830), such as by analyzing the context data 202 to detect whether any ofthe devices 722 a-c is performing the third task. If any of the devices722 a-c is performing the third task, then the method 820 prevents thedevices 722 a-c from performing the first or second tasks (operation832).

Once the method 800 of FIG. 8B has begun to prevent one or more tasksfrom being performed, the method 800 may continue to prevent such tasksfrom being performed until such prevention is discontinued by the method800 in response to input provided manually by a user, or until thecontext data 202 satisfies some predetermined condition (such as thelapse of a timer, a change in location, or a change in speed).

As another example, the system 720 may not allow the user to manuallydiscontinue unitasking in connection with a particular task. Instead,the system 720 may be configured only to discontinue unitaskingentirely, or to discontinue unitasking in connection with one task andinitiate unitasking in connection with another task, in response tosatisfaction of a predetermined condition by the context data 202, wherethe predetermined condition is not based on user input (or at least thatthe predetermined condition is not based on user input provided by theuser at or around the time at which the system 720 determines whetherthe predetermined condition is satisfied). In such an embodiment, thesystem 720 may or may not allow the user to effectively discontinueunitasking by changing the activation state of the system profile 730and/or of other profiles in the system 720.

In the embodiment illustrated by FIGS. 7B and 8B, detection of theperformance of a single task within a set of tasks causes theperformance of all other tasks in the set to be prevented. This ismerely one example and does not constitute a limitation of the presentinvention. Alternatively, for example, the detection of the performanceof any one or more tasks may cause any one or more other tasks to beprevented. For example, referring to FIG. 7C, a diagram is shown of aplurality of unitasking specifiers 740 a-c, each of which specifies oneor more tasks to be prevented in response to detection of theperformance of one or more other tasks.

More specifically, unitasking specifier 740 a includes a triggering tasklist 742 a, which specifies the task(s) that trigger the unitaskingspecifier 740 a, and a prevented task list 746 a, which specifies thetask(s) that are prevented from being performed when the unitaskingspecifier 740 a is triggered. In particular, the triggering task list742 a includes a single triggering task specifier 744 a, which mayspecify any task. Furthermore, the prevented task list 746 a includesthree prevented task specifiers 748 a-c, which may specify any threedistinct tasks. The method 820 of FIG. 8B may be generalized so thatoperation 822 determines whether any of the devices 722 a-c isperforming any of the tasks specified by the triggering task list 746 a,and so that operation 824 prevents the devices 722 a-c from performingany of the tasks specified by the prevented task list 746 a.

Unitasking specifier 740 b includes a triggering task list 742 b and aprevented task list 746 b. In particular, the triggering task list 742 bincludes a first triggering task specifier 754 a and a second triggeringtask specifier 754 b, which may specify any two distinct tasks.Furthermore, the prevented task list 746 b includes three prevented taskspecifiers 758 a-c, which may specify any three distinct tasks. Themethod 820 of FIG. 8B may be generalized so that operations 826 and 828apply to the triggering task list 742 b and the prevented task list 746b, respectively.

Finally, unitasking specifier 740 c includes a triggering task list 742c and a prevented task list 746 c. In particular, the triggering tasklist 742 c includes a first triggering task specifier 764 a and a secondtriggering task specifier 764 b, which may specify any two distincttasks. Furthermore, the prevented task list 746 b includes a singleprevented task specifier 768 a, which may specify any task. The method820 of FIG. 8B may be generalized so that operations 830 and 832 applyto the triggering task list 742 c and the prevented task list 746 c,respectively.

As the examples in FIG. 7C illustrate, there may be a one-to-one,one-to-many, many-to-one, or many-to-many relationship between the tasksin the triggering task list of a unitasking specifier and the tasks inthe prevented task list of that unitasking specifier. Furthermore, thetriggering task list and the prevented task list of a particularunitasking specifier may be disjoint; in other words, the triggeringtask list may contain no tasks that are in the prevented task list, andthe prevented task list may contain no tasks that are in the triggeringtask list.

Furthermore, the union of the triggering task list and the preventedtask list of a particular unitasking specifier may specify fewer thanall of the tasks that a particular one of the devices 722 a-c in thesystem 720 (or the set of devices 722 a-c in the system) is capable ofperforming. For example, the union of triggering task list 742 a andprevented task list 746 a may specify a set of tasks that does notinclude the task associated with task modules 728 a and 728 c in FIG.7B. As a result, when the system 720 applies the unitasking specifier740 to prevent the tasks specified by the prevented task list 746 a frombeing performed by the devices 722 a-c, such prevention may not includepreventing task modules 728 a and 728 c from performing their associatedtask. As a result, task modules 728 a and 728 c may continue to performtheir associated task even while the system 720 and method 820 preventtask modules 724 a, 726 a, 724 b, and 726 b from performing theirrespective tasks.

Unitasking-based features of embodiments disclosed herein may be used inconnection with any other embodiments disclosed herein. Unitasking-basedfeatures of embodiments disclosed herein may, however, be usedindependently of various features disclosed herein. For example,unitasking-based features of embodiments disclosed herein may be used inconnection with profiles or without the use of profiles.

Referring FIG. 9A, an example of a user interface 900 a representing aparticular profile (e.g., the system profile 710 in FIG. 7) is shown.This and other users interfaces disclosed herein are merely examples andnot limitations of the present invention. The user interface 900 aincludes a first mode section 904 a representing a first logic module(e.g., logic module 712 a) having a first condition that is satisfied bya first communication mode; a second mode section 904 b representing asecond logic module (e.g., logic module 712 b) having a second conditionthat is satisfied by a second communication mode; and a third modesection 904 c representing a third logic module (e.g., logic module 712c) having a third condition that is satisfied by a third communicationmode. In the example of FIG. 9A, the three communication modes areemail, text messaging, and voice calls. In particular:

-   -   the first mode section 904 a includes: (1) a mode identification        element 906 a indicating the mode that satisfies the condition        specified by condition specifier 714 a; and (2) a manifestation        of the first mode action represented by the first mode action        specifier 716 a, namely an element 908 a in the form of a circle        containing the word “block”;    -   the second mode section 904 b includes: (1) a mode        identification element 906 b indicating the mode that satisfies        the condition specified by condition specifier 714 b; and (2) a        manifestation of the first mode action represented by the first        mode action specifier 716 b, namely an element 908 b in the form        of a circle containing the word “allow”; and    -   the third mode section 904 c includes: (1) a mode identification        element 906 c indicating the mode that satisfies the condition        specified by condition specifier 714 c; and (2) a manifestation        of the first mode action represented by the first mode action        specifier 716 c, namely an element 908 c in the form of a circle        containing the word “forward.”

The user interface 900 a, therefore, represents the contents of thecorresponding profile at a particular time. The user interface 900 a mayalso be used to receive user input for modifying the contents of thecorresponding profile. In other words, the user interface 900 a may be amechanism for receiving, from a user, input to provide to a profilecontroller and thereby to cause the profile controller to modify thecontents of the profile based on the input, as disclosed above inconnection with FIGS. 1G and 3B.

For example, the user may provide input through the user interface 900 ato modify the first condition specifier 714 a by:

-   -   editing the text of the first mode identification element 906 a        to specify a communication mode that differs from the        communication mode currently specified by the first mode        specifier 906 a (e.g., by editing the text “Email” to read        “Fax”);    -   selecting the first mode identification element 906 a, thereby        causing a drop-down list of available communication modes to be        displayed, and by then selecting an alternate communication mode        (e.g., “Fax”) from the list; or    -   selecting (e.g., clicking on) the first mode identification        element 906 a one or more times, thereby causing labels of        available communication modes (e.g., “Email,” “Text,” “Voice,”        “Fax”) to be manifested sequentially in response to each        selection, until a label of the communication mode desired by        the user is manifested.

Similarly, the user may, for example, provide input to the userinterface 900 a to modify the first action specifier 716 a by:

-   -   selecting the first mode action element 908 a, thereby causing a        drop-down list of available actions (e.g., “Block,” “Allow,”        “Forward,” and “Defer”) to be displayed, and then selecting an        alternate action (e.g., “Allow”) from the list; or    -   selecting (e.g., clicking on) the first mode action element 908        a one or more times, thereby causing labels of available actions        (e.g., “Allow,” “Forward,” “Defer,” and “Block”) to be        manifested sequentially in response to each selection, until a        label of the action desired by the user is manifested.

If individual logic modules in a profile have activation states (as inthe case of FIG. 5B), such a profile may be manifested by the userinterface 900 b of FIG. 9B. The user interface 900 b of FIG. 9B issimilar to the user interface 900 a of FIG. 9A, except that the userinterface 900 b of FIG. 9B includes first mode activation element 910 a,which manifests an activation state of its corresponding logic module;second mode activation element 910 b, which manifests an activationstate of its corresponding logic module; and third mode activationelement 910 c, which manifests an activation state of its correspondinglogic module. To modify the activation states of the first correspondinglogic module, the user may select (e.g., click on) first mode activationelement 910 a, in response to which the corresponding logic modulecontroller may toggle the value of the corresponding activation statespecifier from its current value (e.g., “active”) to its alternate value(e.g., “inactive”).

If a profile has an activation state (as in the case of FIG. 5C), such aprofile may be manifested by the user interface 900 c of FIG. 9C, whichis similar to the user interface 900 a of FIG. 9A, except that the userinterface 200 c of FIG. 9C further includes a profile activation element912, which manifests the activation state of the corresponding profile.To modify the activation state of the corresponding profile, the usermay select (e.g., click on) profile activation element 910 c, inresponse to which the corresponding profile controller may toggle thevalue of the corresponding activation state specifier from its currentvalue (e.g., “active”) to its alternate value (e.g., “inactive”).

If both a profile and its associated logic modules have activationstates (as in the case of FIG. 5D), such a profile and associated logicmodules may be manifested by the user interface 900 d of FIG. 9D, whichcombines elements of the user interfaces 900 b (FIG. 9B) and 900 c (FIG.9C).

As another example, distinct profiles may have names or other uniqueidentifiers, such as “work,” “home,” and “school,” or “weekday” and“weekend.” Embodiments of the present invention may provide userinterfaces that enable a user to select a particular profile and therebymake the selected profile the active profile by selecting the profile'sname, such as by selecting the name from a list or speaking the name ofthe profile. Such a user interface may also allow the user to select andactivate/deactivate a profile by issuing a single command, such as“activate work” or “deactivate home.” As yet another example, a userinterface may enable a user to either deactivate all profiles or selecta particular profile as the active profile by issuing a single command,e.g., by speaking a single word or phrase, or by selecting a single wordor phrase from a list, where an example of such a list is: “Disable,”“Home,” “Work,” and “Car.” In this example, selecting “Disable” causesall profiles (e.g., all profiles, or all system, device, or userprofiles) to be disabled, while selecting any one of “Home,” “Work,” and“Car” causes a corresponding profile to be selected as the activeprofile.

As another example, user interfaces may enable the user to select logicmodules and/or to configure logic modules without the use of profiles.For example, a user interface may enable a user to select a particularcombination of two or more logic profiles, such as by selecting suchprofiles from a list, where an example of such a list is: “Disable,”“Email: Block, Text: Allow, Voice: Forward,” “Email: Allow, Text: Allow:Voice: Block,” and “Email: Forward, Text: Forward, Voice: Forward.” Inthis example, selecting “Disable” causes all logic modules (e.g., alllogic modules associated with a system, device, or user) to be disabled,while selecting any other entry from the list causes a correspondingcombination of logic modules to be selected as the current logicmodules.

Any of the techniques disclosed herein may be implemented, for example,as: (1) standalone components (e.g., hardware and/or computer programs),which may or may not interoperate with existing components (e.g.,existing computing devices, existing messaging software); (2) plug-insto existing components; or (3) integral modifications to existingcomponents. Implementing plug-in embodiments may, for example, includeinstalling the plug-in to the existing component using a plug-ininterface provided by the existing component. Embodiments that are notimplemented as integral modifications to existing components may, forexample:

-   -   implement actions such as blocking messages by performing one or        more of the following: (1) intercepting messages (and other        input) addressed to such components and preventing such input        from reaching such components; (2) intercepting messages (and        other output) generated by such components and preventing such        output from reaching its designated destination; (3) disabling        or enabling such components, or sub-components thereof; and (4)        modifying the configurations of such components, such as by        using API calls; and    -   implement actions such as allowing messages by performing one or        more of the following: (1) intercepting messages (and other        input) addressed to such components and forwarding such input to        such components; (2) intercepting messages (and other output)        generated by such components and forward such output to its        designated destination; (3) enabling such components, or        sub-components thereof, and then not intercepting input        addressed to or output generated by such components; and (4)        modifying the configurations of such components, such as by        using API calls.

Embodiments of the present invention may respond in a variety of ways tochanges in the activation states of profiles and logic modules. Forexample, if a logic module is inactive and then becomes active, thetechniques disclosed herein may begin to apply the logic module to thecontext data 202. For example, if the condition specified by the logicmodule is satisfied by a particular class of messages, then thetechniques disclosed herein may begin to perform the action specified bythe logic module in response to detection of messages in the particularclass.

It may, however, be desirable to take additional actions, or to modifythe actions performed by the logic module, in anticipation of a futuretransition of the logic module from active to inactive. For example, ifthe action specified by the logic module is “block,” then it may bedesirable, upon a transition of the logic module from active toinactive, to “unblock” any messages that were blocked by the logicmodule while it was active. Such a result may be achieved by, forexample, implementing a “block” action as a “defer” action, where thecondition that terminates the “defer” action is the transition of thelogic module from active to inactive. The “defer” action may, forexample, store deferred messages in a deferral queue. Upon transition ofthe logic module from active to inactive, messages in the deferral queuemay, for example, be delivered to their designated destination. Forexample, incoming messages that were prevented from being inserted intoan inbox by the “defer” action may be inserted into the inbox upontransition of the logic module from active to inactive, and outgoingmessages that were prevented from being transmitted to theirdestinations may be transmitted to their destinations upon transition ofthe logic module from active to inactive. More generally, in response totransition of a logic module from active to inactive, any actions thatwere prevented from being performed by the logic module while the logicmodule was active may be performed.

The same techniques may be applied in connection with changes in theactivation state of a profile (e.g., a system, device, or user profile)that is associated with the logic module, assuming that the logic moduleis active. In other words, if a logic module is active, then thetransition of a profile associated with the logic module from inactiveto active may be implemented in the same way as a transition of thelogic module from inactive to active, and the transition of the profilefrom active to inactive may be implemented in the same way as atransition of the logic module from active to inactive.

As another example, when a logic module (or associated profile)transitions from inactive to active, the state of components (such asemail clients, instant messaging clients, web browsers, VoIP clients,desktop computers, laptop computers, smartphones, and tablet computers)that may be affected by the actions of the logic module may be stored.In particular, any state that is modified in response to a transition ofa logic module from inactive to active may be saved before that state ismodified. For example, when a logic module transitions from inactive toactive, techniques disclosed herein may save the current ringer volumeof a telephone before changing the ringer volume. In response to atransition of the logic module from active to inactive, such saved statemay be restored to the system from which the state was saved, such as byrestoring the telephone ringer volume to its saved state. As anotherexample, when a logic module transitions from inactive to active,techniques disclosed herein may terminate an email client if the logicmodule specifies that transmission of email messages is to be blocked.In response to a transition of the logic module from active to inactive,such saved state may be restored by launching the email client that wasterminated.

Examples of state that may be saved in response to a transition of alogic module or profile from inactive to active, and restored inresponse to a transition of a communication mode profile from active toinactive, include but are not limited to: ringer volume, ringer tone,automatic forwarding of voice calls to voicemail, enabled/disabled stateof user interface elements (e.g., buttons, menus, and menu items), emailsend/receive schedule, enabled/disabled state of automatic emailsending/receiving, and manifestation of receipt of messages.

As used herein, “manifesting” data refers to providing output, to auser, that represents such data. Such output may take any form, such asa visual form and/or an auditory form. For example, such output mayinclude any one or more of the following in any combination: text,graphics, images, video, and audio. As this description makes clear, anyoutput described herein as being “manifested,” may, for example, solelyinclude text, solely include graphics, solely include video, or solelyinclude audio.

Having described message control profiles in general, techniques willnext be described for using message control profiles to controltransmission, reception, and notification of messages. First, however,the meaning of the term “communication mode” as used herein will bedescribed.

In general, the “communication mode” of a particular message refers toany feature(s) of the method by which the message is transmitted (sentand/or received). A particular message having a particular communicationmode is transmissible via the particular communication mode. Forexample, a message may be transmissible via a communication mode becausethe message is formatted in a manner that makes the message adapted fortransmission via the communication mode (e.g., formatted according to aprotocol for transmitting messages via the communication mode). If amessage actually is transmitted via a communication mode, then themessage necessarily is transmissible via the communication mode. Amessage need not, however, actually be transmitted via a communicationmode to be transmissible via that communication mode. For example, amessage that is formatted according to a protocol for transmittingmessages via the communication mode is transmissible via thecommunication mode even if the message is deleted or otherwise blockedfrom being transmitted via the communication mode.

Terms such as “transmit” and “transmission” as applied to messagesherein include sending and/or receiving messages. For example,“transmitting a message” includes solely sending a message, solelyreceiving a message, and both sending and receiving a message.Similarly, “transmitting messages” includes solely sending messages,solely receiving messages, and a combination of sending some messagesand receiving other messages. Transmitting a message may includetransmitting a message from one communication device to another over anetwork and/or transmitting a message within one communication device,e.g., from one application executing on the communication device toanother application executing on the communication device.

The following examples of communication modes are exemplary and notexhaustive.

A communication mode may be defined by reference to one or morecategories of message transmission. For example, the followingcategories are examples of communication modes: email, text message,live voice call, fax, and voice message. Because such modes arecategories, a single mode may include, for example:

-   -   messages transmitted via multiple different messaging protocols        (e.g., IMAP and POP3 in the case of email messages);    -   messages sent and messages received;    -   messages transmitted by multiple applications; and    -   messages transmitted by multiple devices.

Therefore, for example, if the communication mode specified by aparticular communication mode profile is an “email” communication modeand the action associated with that communication mode profile is“block,” then the message control system may apply that communicationmode profile by blocking all email messages, regardless of the protocolby which they are transmitted (or attempted to be transmitted),regardless of whether they are sent or received, regardless of theapplication by which they are transmitted, and regardless of the deviceby which they are transmitted.

As another example, a communication mode may be defined by reference toone or more messaging protocols. For example, the IMAP email protocol isan example of a communication mode. Therefore, if the communication modespecified by a particular communication mode profile is “IMAP email,”then the action specified by that communication mode profile will beperformed only in connection with email received using the IMAP emailprotocol, and not, for example, email received using other emailprotocols. Messaging protocols that may define communication modesaccording to embodiments of the present invention include any messagingprotocols at any layer of the OSI (Open Systems Interconnection)seven-layer model. Examples of messaging protocols that may definecommunication modes according to embodiments of the present inventioninclude, but are not limited to, Ethernet, GFP (Generic FramingProcedure), OTN (Optical Transport Network), IP (Internet Protocol), TCP(Transmission Control Protocol), UDP (User Datagram Protocol), HTTP(Hypertext Transfer Protocol), IMAP (Internet Message Access Protocol),IRC (Internet Relay Chat), POP3 (Post Office Protocol Version 3), andSMTP (Simple Mail Transfer Protocol), VoIP (Voice over InternetProtocol).

As another example, a communication mode may be defined by reference toone or more messaging services, such as SMS (Short Message Service), MMS(Multimedia Messaging Service), and EMS (Enhanced Messaging Service).

As another example, a communication mode may be defined by reference toa direction of transmission (i.e., send or receive). For example, if thecommunication mode specified by a particular communication mode profileis “receive,” then the action specified by that communication modeprofile will be performed in connection with received messages but notin connection with sent messages. Note that, for example, such a“receive” communication mode may include messages in multiple categories(e.g., email messages, text messages, and voice calls), transmittedusing multiple protocols, and transmitted using multiple devices.

As another example, a communication mode may be defined by reference toone or more communication accounts. For example, messages transmissiblevia a first email account may be transmissible via a first communicationmode, messages transmissible via a second email account may betransmissible via a second communication mode, and messagestransmissible via a first text messaging account may be transmissiblevia a third communication mode.

As another example, a communication mode may be defined by reference toone or more types of message content, such as any of the following:text, image, video, and audio. Such content types may be furtherdivided. For example, audio content may be divided into voice andnon-voice content, each of which may define a separate mode.

Similarly, a communication mode may be defined by reference to one ormore types of content manifestation, by which is meant the type ofcontent that is used to manifest a particular message. For example, avoice call that is manifested by playing the audio through a speaker ismanifested using an “audio” type of content. Similarly, a text messagethat is converted into speech by a text-to-speech engine is alsomanifested using an “audio” type of content, even though the textmessage itself has a “text” type of content.

Similarly, a communication mode may be defined by reference to theapplication that generated, sent, received, and/or manifested a message.For example, a communication mode may be defined by reference to one ormore named applications (e.g., Microsoft Outlook, Mozilla FireFox,Facebook), one or more application types (e.g., email client, webbrowser, text messaging client), and/or the installation/executionlocation of the application (e.g., installed locally on the user'scomputer or installed and executing remotely, such as in the case ofcloud-based applications, such as Facebook and Twitter). The definitionof such a communication mode may encompass any one or more ofgenerating, sending, receiving, and manifesting messages. For example, acommunication mode may be defined to include messages generated, sent,received, and manifested by a particular named application (e.g.,Microsoft Outlook), or only to include messages received by such anapplication but not to messages generated, sent, or manifested by suchan application.

Any of the characteristics of communication modes described above may becombined with each other in any way. For example, a communication modemay be defined by reference to a message category (e.g., email) andtransmission direction (e.g., receive) to define a communication modethat encompasses “received email.”

The description herein refers to “detecting” a message. Such detectionmay include, for example, any one or more of the following: detection ofan instruction to send the message, detection of an attempt to send themessage, detection of the message in the process of being sent,detection that the message has been sent, detection of a scheduled timeto send the message, detection of an instruction to receive the message,detection of an attempt to receive the message, detection of the messagein the process of being received, detection that the message has beenreceived, and detection of a scheduled time to receive the message.

A “communication device” may be any device that is capable of performingany one or more of the following functions: transmitting messages,receiving messages, and providing notifications of messages. Examples ofcommunication devices include desktop computers, laptop computers,tablet computers, cellular telephones (including smartphones), andpersonal digital assistants (PDAs), and combinations thereof.

Embodiments of the present invention may be applied to messages,notifications of messages, or both. A notification of a message is anyoutput derived from a message that is intended to provide informationabout the message. For example, when an email client displays thesubject line of an email message but not the remainder of the emailmessage, the displayed subject line is an example of a notification ofthe email message. In this example, the notification is output to auser, but this is not required. Instead, for example, a notification maybe transmitted between two computing devices or two computer programs. Anotification of a message may contain some or all of the content of themessage. A notification of a message may contain information that isderived from, but not contained within the content of the message. Anotification may be manifested in any of the ways disclosed herein. Anyof the actions disclosed herein may be performed on notifications. Anotification may itself be a message.

Embodiments of the present invention have a variety of advantages. Forexample, conventional out of office assistants and other auto-responderstypically respond to all messages, or to no messages, regardless of thecurrent context of the recipient. Although some auto-responders providethe ability to send responses only during a particular period of timemanually specified by the user, such limited configurability imposessignificant restrictions on the ability of users to rely on suchauto-responders to decide whether to respond automatically to messagesin accordance with the users' preferences. As a result, recipients mustmanually turn such auto-responders on and off as necessary to enablesuch auto-responders to send automatic responses when such responses aredesired to be sent and not when such responses are not desired to besent. Requiring such extensive manual activation and de-activation byusers can result in failing to send auto-responses when desired (e.g.,if the user forgets to turn on the auto-responder when needed) and insending auto-responses when not desired (e.g., if the user forgets toturn off the auto-responder when not needed). As a result, conventionalauto-responders typically are used and are useful only for sendingautomatic responses during relatively long, contiguous blocks of time,such as entire days or weeklong vacations, but are not used or suitablefor sending automatic responses only during short periods of time,particularly when such periods of time are not planned by the user inadvance.

In contrast, embodiments of the present invention may be used toautomatically send auto-responses when, and only when, the recipient'scurrent context satisfies a predetermined condition, such as apredetermined condition specified in advance by the recipient. Such acondition may, for example, specify that auto-responses are to be sentwhenever the recipient is in an appointment scheduled on the recipient'scalendar, whenever the recipient is not in the recipient's office (asmay be determined, for example, using a GPS module in the recipient'ssmart phone to identify the recipient's current location automaticallyand in real-time), whenever the recipient is driving or otherwisetraveling (as may be determined, for example, using a GPS module in therecipient's smart phone to identify the recipient's current velocity andto conclude in real-time that the recipient is driving or otherwisetraveling if the recipient's currently velocity is greater than somepredetermined minimum threshold, e.g., ten miles per hour). Embodimentsof the present invention may use such conditions to dynamically andautomatically decide whether to send responses automatically to anyparticular message transmitted to the recipient based on the recipient'scurrent context at the time of receipt of the message. As a result,embodiments of the present invention may achieve an effect that issimilar to turning a conventional auto-responder on and offautomatically over time in response to changes in the recipient'scontext over time, in a way that reflects the user's expressedpreferences, and without requiring the user to turn the auto-responderon and off manually. This feature of embodiments of the presentinvention enables users to obtain the benefits of an auto-responder(such as the ability to acknowledge receipt of messages and to set theexpectations of the senders of such messages promptly and respectfully)in a much wider range of circumstances than with conventionalauto-responders, with less effort on the part of users, and in a waythat may result in fewer false positives (i.e., sending auto-responseswhen such responses are not desired by the recipient) and fewer falsenegatives (i.e., not sending auto-responses when such responses aredesired by the recipient) than conventional auto-responders.

As another example, when conventional out of office assistants and otherauto-responders send automatic responses, they typically send the sameautomatic response to all senders. Microsoft Outlook has the ability tosend one message to senders within the recipient's organization andanother message to recipients outside the recipient's organization.Otherwise, however, Outlook lacks the ability to send differentauto-response messages based on the current context of the recipient.Such limited configurability imposes significant restrictions on theability of users to provide informative and helpful auto-responsemessages. For example, most users configure Outlook with a genericauto-response message informing senders that the recipient is out of theoffice and will respond to messages upon returning to the office, orperhaps that the recipient will check messages at some specifiedfrequency (e.g., once per day) while out of the office. Suchauto-response messages provide senders with only generic informationabout the reason for the recipient's absence and the time at which thesender should expect to receive a response from the recipient. As aresult, senders may resort to sending multiple copies of the samemessage to the recipient during the recipient's absence, and possibly tocontacting the recipient via multiple communication modes (e.g., email,text message, and voice message) during the recipient's absence due tothe sender's uncertainty about the time at which the recipient willrespond to the sender.

In contrast, embodiments of the present invention may be used toautomatically tailor the content of an auto-response message sent inresponse to a particular incoming message based on the context of therecipient at the time when the incoming message is received or otherwisedetected. For example, if the incoming message is received while therecipient is in a meeting (as indicated by a scheduled appointment inthe recipient's calendar), embodiments of the present invention mayautomatically generate and send to the sender a response message which:(1) informs the sender that the recipient currently is in a meeting, (2)informs the sender of the scheduled end time of the meeting; and (3)notifies the sender that the recipient will not be able to respond tothe sender until at least the scheduled end time of the meeting. If,after conclusion of such a meeting, the recipient enters anotherscheduled meeting and receives another message during the otherscheduled meeting, embodiments of the present invention mayautomatically respond to such a message with a response message whichdiffers from the previous response message, such as by including the endtime of the new meeting, without requiring the user to take any actionto change the auto-response message based on the new context.

As a result, embodiments of the present invention may be used to reduceor eliminate the uncertainty and unease felt by senders of messages whoreceive no responses to such messages or who receive only genericauto-responses to such messages by providing such senders withinformation about the recipient's context at the time the senders'messages are received by the recipients. In this way, embodiments of thepresent invention may be used not only to provide auto-responses thatare more informative to and respectful of senders, but also to reducethe number of redundant messages sent by senders to recipients, byproviding senders with a concrete expectation of the time at which (orat least not before which) they should expect to receive a response fromthe recipient. Embodiments of the present invention may also reduce someof the pressure on recipients to respond immediately to incomingmessages, by providing recipients with the knowledge that theexpectations of the senders of such messages have been influenced withrespect to the time at which they should expect to receive responses.

As another example, embodiments of the present invention may be used toperform actions, such as blocking messages, during particularpredetermined times specified by a user, such as times corresponding toappointments on the user's calendar. The actions may be designed toeliminate or reduce distractions to the user. Because the user mayspecify such times in advance of the occurrence of such times (such asby scheduling appointments on the user's calendar in advance of theoccurrence of such times), the user may engage in activities during suchtimes free of undesired distractions without needing to take any furtheraction. In other words, embodiments of the present invention mayautomatically perform the distraction-limiting actions previouslyspecified by the user at the times previously specified by the user,thereby freeing the user from such distractions during thepreviously-specified times, freeing the user from the need to manuallyactivate desired distraction-limiting features upon the onset of thepreviously-specified times, and freeing the user from the need tomanually deactivate the desired distraction-limiting features upon theconclusion of the previously-specified times.

Another advantage of embodiments of the present invention is that theymay be used to “time shift” the transmission (e.g., receiving orsending) of messages to or from a user. For example, embodiments of thepresent invention may be used to defer the receipt of email messages bya user during a particular appointment on the user's calendar. In such asituation, during the appointment an embodiment of the present inventionmay receive incoming email messages addressed to the user but preventsuch messages from being delivered to the user and/or preventnotifications of such messages from being provided to the user, such asby holding such messages in a queue other than the user's email inboxand/or by suppressing notifications of such messages. Then, upon theconclusion of the appointment, the embodiment of the present inventionmay provide the held messages to the user and/or notify the user of suchmessages, such as by inserting such messages into the user's email inboxand/or by providing notifications of such messages to the user. As aresult, the messages and corresponding notifications are provided to theuser, but at times of the user's choosing, which may differ from thetimes at which the messages and their corresponding notifications wouldhave been provided to the user if the messages were not held initially.In other words, the reception time of such messages is shifted.

One benefit of time-shifting embodiments of the present invention isthat, unlike existing systems for blocking messages, the time-shiftingembodiments do not necessarily prevent messages from being received orsent by the user. Instead, they may merely change the time at which suchmessages are transmitted to/from the user and/or provided to the user.This differs from, for example, anti-spam systems which either deleteincoming spam messages or move incoming spam messages into a queue otherthan the user's inbox. Such systems never move spam messages back intothe user's inbox because the user does not desire to receive suchmessages. Time-shifting embodiments of the present invention, incontrast, may initially move messages into a queue other than the user'sinbox but subsequently move such message into the user's inbox becausethe user may desire to receive such messages, only not at the timedesired by the messages' senders. Time-shifting embodiments of thepresent invention may, therefore, shift control over the time of messagereceipt and/or notification from the sender to the recipient ofmessages, and thereby enabling the recipient to handle such messagesmore efficiently than by attending to them at the times dictated bytheir senders.

Time-shifting embodiments of the present invention may simply defermessages until a later time, such as a time during which the user has noscheduled appointments. Time-shifting embodiments of the presentinvention may, however, perform more complex operations on time-shiftedmessages. For example, embodiments of the present invention may bothtime-shift and time-sort messages. As one example, assume that anyparticular message may have a high priority, a medium priority, or a lowpriority. Next, consider a stream of incoming messages having thefollowing priorities: low, low, medium, high, medium, high, low, medium,high. Assume that an embodiment of the present invention receives such amessage stream while a user is in a scheduled appointment, and that theembodiment therefore defers such messages while the user is in theappointment. Upon conclusion of the appointment, the embodiment mayprovide the three high-priority messages (but not any of thelow-priority or medium-priority messages) to the user during a firsttime window (e.g., of 10 minutes); then provide the threemedium-priority messages (but not any of the low-priority messages) tothe user during a second time window (e.g., of 10 minutes); and thenprovide the three low-priority messages to the user. This example, whichmay be implemented using logic of the kind described above, is anexample in which messages are both time-shifted and time-sorted, where aset of messages is “time sorted” by re-arranging the temporal sequencein which the messages in the set are transmitted or provided, or inwhich notifications of the messages are provided, in accordance with oneor more sort criteria. As a result of time sorting a set of messages,the messages may be transmitted or provided, or notifications of themessages may be provided, in a different temporal sequence than thetemporal sequence originally intended.

The ability of modern computing devices to engage in multitasking has avariety of benefits. For example, the user of a multitasking device canuse that device to perform multiple tasks, without the need to purchaseor use multiple devices. The ability of a device to multitask, however,can generate interruptions and other distractions that can decrease theuser's productivity in connection with the activity in which the usercurrently is engaged. One benefit of embodiments of the presentinvention is that they enable the user to focus on one activity at atime, free from interruptions and other distractions. Such embodimentsmay, therefore, increase the user's productivity.

Embodiments of the present invention need not, however, limit the userto using a multitasking device to perform only one task. Instead,embodiments of the present invention may limit the user to using themultitasking device to perform only one task at a time, while stillallowing the user to switch from one task to another over time. As aresult, the user may still obtain the benefit of a single device that iscapable of performing multiple tasks by using such a device to performthose tasks sequentially. While the user is using the device to performany particular task as part of an activity in which the user is engaged,the user may remain focused on that activity, even if the usersubsequently uses the device to perform a different task.

It is to be understood that although the invention has been describedabove in terms of particular embodiments, the foregoing embodiments areprovided as illustrative only, and do not limit or define the scope ofthe invention. Various other embodiments, including but not limited tothe following, are also within the scope of the claims. For example,elements and components described herein may be further divided intoadditional components or joined together to form fewer components forperforming the same functions.

Any of the functions disclosed herein may be implemented using means forperforming those functions. Such means include, but are not limited to,any of the components disclosed herein, such as the computer-relatedcomponents described below.

The techniques described above may be implemented, for example, inhardware, one or more computer programs tangibly stored on one or morenon-transitory computer-readable media, firmware, or any combinationthereof. The techniques described above may be implemented in one ormore computer programs executing on a programmable computer including aprocessor, a storage medium readable by the processor (including, forexample, volatile and non-volatile memory and/or storage elements), atleast one input device, and at least one output device. Program code maybe applied to input entered using the input device to perform thefunctions described and to generate output. The output may be providedto one or more output devices.

Terms such as “computer,” “computing device,” and “communicationdevice,” as used herein refer, for example, to desktop computers, laptopcomputers, cellular telephones and smartphones, personal digitalassistants (PDAs), and tablet computers.

Each computer program within the scope of the claims below may beimplemented in any programming language, such as assembly language,machine language, a high-level procedural programming language, or anobject-oriented programming language. The programming language may, forexample, be a compiled or interpreted programming language.

Each such computer program may be implemented in a computer programproduct tangibly embodied in a machine-readable storage device forexecution by a computer processor. Method steps of the invention may beperformed by a computer processor executing a program tangibly embodiedon a computer-readable medium to perform functions of the invention byoperating on input and generating output. Suitable processors include,by way of example, both general and special purpose microprocessors.Generally, the processor receives instructions and data from a read-onlymemory and/or a random access memory. Storage devices suitable fortangibly embodying computer program instructions include, for example,all forms of non-volatile memory, such as semiconductor memory devices,including EPROM, EEPROM, and flash memory devices; magnetic disks suchas internal hard disks and removable disks; magneto-optical disks; andCD-ROMs. Any of the foregoing may be supplemented by, or incorporatedin, specially-designed ASICs (application-specific integrated circuits)or FPGAs (Field-Programmable Gate Arrays). A computer can generally alsoreceive programs and data from a storage medium such as an internal disk(not shown) or a removable disk. These elements will also be found in aconventional desktop or workstation computer as well as other computerssuitable for executing computer programs implementing the methodsdescribed herein, which may be used in conjunction with any digitalprint engine or marking engine, display monitor, or other raster outputdevice capable of producing color or gray scale pixels on paper, film,display screen, or other output medium.

What is claimed is:
 1. A method performed by at least one computerprocessor, the method comprising: (A) detecting a first incomingmessage, wherein the first incoming message is associated with a firstsender and a first recipient; (B) identifying first context dataassociated with the first recipient at a first time; (C) determiningwhether a first condition is satisfied by the first context data; (D) ifthe first condition is determined to be satisfied by the first contextdata, then: (D)(1) selecting a first response message based on the firstcontext data; (D)(2) sending the first response message to the firstsender; and (D)(3) blocking a notification of the first incomingmessage; (E) detecting a second incoming message, wherein the secondincoming message is associated with the first sender and the firstrecipient; (F) identifying second context data associated with the firstrecipient at a second time, wherein the second context data differs fromthe first context data; (G) determining whether the first condition issatisfied by the second context data; (H) if the first condition isdetermined to be satisfied by the second context data, then: (H) (1)selecting a second response message based on the second context data,wherein the first response message differs from the second responsemessage; and (H)(2) sending the second response message to the firstsender; wherein (D)(1) comprises selecting the first response messageindependently of content of the first incoming message; and wherein(H)(1) comprises selecting the second response message independently ofcontent of the second incoming message.
 2. The method of claim 1,wherein (D)(1) comprises generating the first response message based onthe first context data.
 3. The method of claim 1, wherein (D) (1)comprises: (D) (1) (a) before (A), receiving response template dataincluding: (a) fixed content specification data; and (2) variablecontent specification data; (D) (1) (b) after (B), generating the firstresponse message based on the first context data, comprising: (D) (1)(b) (i) including, in the first response message, data derived from thefixed content specification data independently of the first contextdata; and (D) (1) (b) (ii) including, in the first response message,data derived from the variable content specification and the firstcontext data.
 4. The method of claim 1, wherein (D)(1) comprisesselecting the first response message based on the first time.
 5. Themethod of claim 1, wherein (D)(1) comprises selecting the first responsemessage based on an appointment associated with the first recipient. 6.The method of claim 1, wherein (D) (1) comprises: (D) (1) (a)identifying a first task performed by a device associated with the firstrecipient at the first time; and (D)(1)(b) selecting the first responsemessage based on the first task.
 7. The method of claim 1: wherein (A)comprises detecting a first incoming message transmitted via a firstcommunication mode; and wherein (D)(2) comprises sending the firstresponse message to the first sender via the first communication mode.8. The method of claim 7, wherein (D) further comprises: (D)(4)generating a derived message based on the first incoming message; and(D) (5) transmitting the derived message to a second recipient via asecond communication mode that differs from the first communicationmode.
 9. The method of claim 1: wherein (A) comprises detecting a firstincoming message transmitted via a first communication mode; and wherein(D)(2) comprises sending the first response message to the first sendervia a second communication mode that differs from the firstcommunication mode.
 10. The method of claim 1, wherein (D) furthercomprises: preventing transmission of the first incoming message to adevice associated with the first recipient; and after preventingtransmission of the first incoming message to the device associated withthe first recipient, allowing transmission of the first incoming messageto the device associated with the first recipient in response todetermining that the first condition is not satisfied by the secondcontext data.
 11. The method of claim 1, wherein blocking thenotification of the first incoming message comprises: preventing thenotification of the first incoming message from being manifested. 12.The method of claim 11, further comprising: (I) after preventing thenotification of the first incoming message from being manifested,allowing the notification of the first incoming message to be manifestedin response to determining that the first condition is not satisfied bythe second context data.
 13. The method of claim 12, wherein allowingthe notification of the first incoming message to be manifestedcomprises allowing the notification of the first incoming to bemanifested in response to determining that the first condition is notsatisfied by the second context data.
 14. The method of claim 11,wherein detecting the first incoming message comprises receiving thefirst incoming message before (D)(3).
 15. The method of claim 11,further comprising: (I) before (D)(3), receiving the notification of thefirst incoming message.
 16. . The method of claim 1, wherein (D) furthercomprises: (D)(4) forwarding the first incoming message to a secondrecipient.
 17. The method of claim 1: wherein (A) comprises detectingtransmission of the first incoming message via a first communicationmode; and wherein the method further comprises: (I) generating a derivedmessage from the first incoming message; and (J) transmitting thederived message to the first recipient via a second communication modethat differs from the first communication mode.
 18. A non-transitorycomputer-readable medium comprising computer program instructionstangibly stored on the non-transitory computer-readable medium, whereinthe instructions are executable by at least one computer processor toperform a method comprising: (A) detecting a first incoming message,wherein the first incoming message is associated with a first sender anda first recipient; (B) identifying first context data associated withthe first recipient at a first time; (C) determining whether a firstcondition is satisfied by the first context data; (D) if the firstcondition is determined to be satisfied by the first context data, then:(D)(1) selecting a first response message based on the first contextdata; (D)(2) sending the first response message to the first sender; and(D)(3) blocking a notification of the first incoming message; (E)detecting a second incoming message, wherein the second incoming messageis associated with the first sender and the first recipient; (F)identifying second context data associated with the first recipient at asecond time, wherein the second context data differs from the firstcontext data; (G) determining whether the first condition is satisfiedby the second context data; (H) if the first condition is determined tobe satisfied by the second context data, then: (H)(1) selecting a secondresponse message based on the second context data, wherein the firstresponse message differs from the second response message; and (H)(2)sending the second response message to the first sender; wherein (D)(1)comprises selecting the first response message independently of contentof the first incoming message; and wherein (H)(1) comprises selectingthe second response message independently of content of the secondincoming message.
 19. The non-transitory computer-readable medium ofclaim 18, wherein (D)(1) comprises generating the first response messagebased on the first context data.
 20. The non-transitorycomputer-readable medium of claim 18, wherein (D)(1) comprises: (D) (1)(a) before (A), receiving response template data including: (a) fixedcontent specification data; and (2) variable content specification data;(D) (1) (b) after (B), generating the first response message based onthe first context data, comprising: (D) (1) (b) (i) including, in thefirst response message, data derived from the fixed contentspecification data independently of the first context data; and (D) (1)(b) (ii) including, in the first response message, data derived from thevariable content specification and the first context data.
 21. Thenon-transitory computer-readable medium of claim 18, wherein (D)(1)comprises selecting the first response message based on the first time.22. The non-transitory computer-readable medium of claim 18, wherein(D)() comprises selecting the first response message based on anappointment associated with the first recipient.
 23. The non-transitorycomputer-readable medium of claim 18, wherein (D)(1) comprises: (D) (1)(a) identifying a first task performed by a device associated with thefirst recipient at the first time; and (D)(1)(b) selecting the firstresponse message based on the first task.
 24. The non-transitorycomputer-readable medium of claim 18: wherein (A) comprises detecting afirst incoming message transmitted via a first communication mode; andwherein (D)(2) comprises sending the first response message to the firstsender via the first communication mode.
 25. The non-transitorycomputer-readable medium of claim 24, wherein (D) further comprises:(D)(4) generating a derived message based on the first incoming message;and (D) (5) transmitting the derived message to a second recipient via asecond communication mode that differs from the first communicationmode.
 26. The non-transitory computer-readable medium of claim 18:wherein (A) comprises detecting a first incoming message transmitted viaa first communication mode; and wherein (D)(2) comprises sending thefirst response message to the first sender via a second communicationmode that differs from the first communication mode.
 27. Thenon-transitory computer-readable medium of claim 18, wherein (D) furthercomprises: preventing transmission of the first incoming message to adevice associated with the first recipient; and after preventingtransmission of the first incoming message to the device associated withthe first recipient, allowing transmission of the first incoming messageto the device associated with the first recipient in response todetermining that the first condition is not satisfied by the secondcontext data.
 28. The non-transitory computer-readable medium of claim18, wherein blocking the notification of the first incoming messagecomprises: preventing the notification of the first incoming messagefrom being manifested.
 29. The non-transitory computer-readable mediumof claim 28, wherein detecting the first incoming message comprisesreceiving the first incoming message before (D)(3).
 30. Thenon-transitory computer-readable medium of claim 28, wherein the methodfurther comprises: (I) before (D)(3), receiving the notification of thefirst incoming message.
 31. The non-transitory computer-readable mediumof claim 18, further comprising: (I) after preventing the notificationof the first incoming message from being manifested, allowing thenotification of the first incoming message to be manifested in responseto determining that the first condition is not satisfied by the secondcontext data.
 32. The non-transitory computer-readable medium of claim31, wherein allowing the notification of the first incoming message tobe manifested comprises allowing the notification of the first incomingto be manifested in response to determining that the first condition isnot satisfied by the second context data.
 33. The non-transitorycomputer-readable medium of claim 18, wherein (D) further comprises:(D)(4) forwarding the first incoming message to a second recipient. 34.The non-transitory computer-readable medium of claim 18: wherein (A)comprises detecting transmission of the first incoming message via afirst communication mode; and wherein the method further comprises: (I)generating a derived message from the first incoming message; and (J)transmitting the derived message to the first recipient via a secondcommunication mode that differs from the first communication mode.